Skip to content
Extraits de code Groupes Projets
Valider c5beaa2b rédigé par Mohamed Lemine BAILLAHI's avatar Mohamed Lemine BAILLAHI
Parcourir les fichiers

Merge branch 'feature/live-chat-pagination' into 'develop'

added live chat pagination

See merge request !19
parents f79c13f5 3e6b70c8
Branches
Étiquettes
1 requête de fusion!19added live chat pagination
Pipeline #10675 réussi avec les étapes
in 42 secondes
Affichage de avec 29 ajouts et 31 suppressions
## [0.0.6-RELEASE]
### Added
- New features that have been added.
### Changed
- Changes in existing functionality.
### Deprecated
- Soon-to-be removed features.
### Removed
- Features that have been removed.
### Fixed
- Any bug fixes.
- added live chat pagination.
### Security
- Any security improvements.
......
......@@ -24,7 +24,6 @@ import com.marketingconfort.mydressin.mydressinstreamservices.configs.LiveServer
"com.marketingconfort.mydressin.common.constant.urlServiceConstant",
})
@ComponentScan(
basePackages = {"com.marketingconfort.starter","com.marketingconfort.mydressin" , "com.marketingconfort.mydressin.mydressinstreamservices"}
)
......
......@@ -65,8 +65,13 @@ public class ChatController {
@GetMapping("/live")
@PreAuthorize("@securityCustomExpressions.isClientTrusted(#requestAuthorization)")
public List<ChatMessageResponse> getMessagesByStream(
@RequestParam Long streamId, @RequestHeader String requestAuthorization) {
return chatService.getAllMsgByStream(streamId);
@RequestParam Long streamId, @RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "100") int size,
@RequestParam(value = "sortBy", defaultValue = "createdAt") String sortBy,
@RequestParam(value = "sortDir", defaultValue = "ASC") String sortDir,
@RequestHeader String requestAuthorization) {
return chatService.getAllMsgByStream(streamId, page, size, sortBy, sortDir);
}
@PostMapping("/block-user")
......
......@@ -3,6 +3,7 @@ package com.marketingconfort.mydressin.mydressinstreamservices.models.repositori
import java.time.LocalDateTime;
import java.util.List;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
......@@ -13,8 +14,8 @@ import com.marketingconfort.mydressin.mydressinstreamservices.models.entities.Ch
@Repository
public interface ChatMessageRepository extends JpaRepository<ChatMessage, Long> {
@Query("SELECT m FROM ChatMessage m WHERE m.liveStream.id = :id AND m.type = com.marketingconfort.mydressin.mydressinstreamservices.models.enums.MessageType.CHAT ORDER BY m.id ASC")
List<ChatMessage> findAllMessagesByLiveStreamId(@Param("id") long id);
@Query("SELECT m FROM ChatMessage m WHERE m.liveStream.id = :id AND m.type = com.marketingconfort.mydressin.mydressinstreamservices.models.enums.MessageType.CHAT")
List<ChatMessage> findAllMessagesByLiveStreamId(@Param("id") long id, Pageable pageable);
@Query("SELECT COUNT(m) FROM ChatMessage m WHERE m.liveStream.id = :liveStream " +
"AND m.createdAt BETWEEN :start AND :end")
......
......@@ -4,7 +4,6 @@ import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import com.marketingconfort.mydressin.mydressinstreamservices.models.dtos.LiveStreamStatisticsDTO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
......@@ -13,6 +12,7 @@ import org.springframework.data.repository.query.Param;
import com.marketingconfort.mydressin.mydressinstreamservices.models.dtos.LiveStopDto;
import com.marketingconfort.mydressin.mydressinstreamservices.models.dtos.LiveStreamResponse;
import com.marketingconfort.mydressin.mydressinstreamservices.models.dtos.LiveStreamStatisticsDTO;
import com.marketingconfort.mydressin.mydressinstreamservices.models.entities.LiveStream;
import com.marketingconfort.mydressin.mydressinstreamservices.models.enums.LiveStatus;
......@@ -26,8 +26,8 @@ public interface LiveStreamRepository extends JpaRepository<LiveStream, Long> {
Page<LiveStream> findByTitleContaining(@Param("searchTerm") String searchTerm, Pageable pageable);
@Query("SELECT new com.marketingconfort.mydressin.mydressinstreamservices.models.dtos.LiveStreamResponse(l.id, l.title, l.chatName, l.startDate, l.description, l.image, l.status) FROM LiveStream l WHERE LIKE %:searchTerm% l.status <> com.marketingconfort.mydressin.mydressinstreamservices.models.enums.LiveStatus.REVIEW AND l.status <> com.marketingconfort.mydressin.mydressinstreamservices.models.enums.LiveStatus.ARCHIVED ORDER BY l.startDate DESC")
List<LiveStreamResponse> findAllLiveStreamsForClient(@Param("searchTerm") String searchTerm ,Pageable pageable);
@Query("SELECT new com.marketingconfort.mydressin.mydressinstreamservices.models.dtos.LiveStreamResponse(l.id, l.title, l.chatName, l.startDate, l.description, l.image, l.status) FROM LiveStream l WHERE l.title LIKE %:searchTerm% AND l.status <> com.marketingconfort.mydressin.mydressinstreamservices.models.enums.LiveStatus.REVIEW AND l.status <> com.marketingconfort.mydressin.mydressinstreamservices.models.enums.LiveStatus.ARCHIVED ORDER BY l.startDate DESC")
List<LiveStreamResponse> findAllLiveStreamsForClient(@Param("searchTerm") String searchTerm, Pageable pageable);
@Query("SELECT l FROM LiveStream l JOIN l.keysWork kw WHERE kw.keyStream = :streamKey")
Optional<LiveStream> findByStreamKey(@Param("streamKey") String streamKey);
......
......@@ -8,7 +8,7 @@ import com.marketingconfort.mydressin.mydressinstreamservices.models.dtos.ChatMe
public interface IChatService {
ChatMessageRequest sendMessage(ChatMessageRequest chatMessageRequest);
List<ChatMessageResponse> getAllMsgByStream(long id);
List<ChatMessageResponse> getAllMsgByStream(long id, int page, int size, String sortBy, String sortDir);
void pinMessage(long id);
void unpinMessage(long id);
ChatMessageResponse save(ChatMessageRequest messageDto);
......
......@@ -4,6 +4,9 @@ import java.util.List;
import java.util.stream.Collectors;
import lombok.AllArgsConstructor;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import com.marketingconfort.mydressin.mydressinstreamservices.models.dtos.ChatMessageRequest;
......@@ -38,8 +41,9 @@ public class ChatService implements IChatService {
}
@Override
public List<ChatMessageResponse> getAllMsgByStream(long id) {
List<ChatMessage> chatMessages = chatMessageRepository.findAllMessagesByLiveStreamId(id);
public List<ChatMessageResponse> getAllMsgByStream(long id, int page, int size, String sortBy, String sortDir) {
Pageable pageable = PageRequest.of(page, size, Sort.Direction.fromString(sortDir), sortBy);
List<ChatMessage> chatMessages = chatMessageRepository.findAllMessagesByLiveStreamId(id, pageable );
return chatMessages.stream()
.map(ChatMessageResponse::fromEntity)
.collect(Collectors.toList());
......
......@@ -25,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.ResourceAccessException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import lombok.extern.slf4j.Slf4j;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.marketingconfort.mydressin.mydressinstreamservices.configs.LiveServerConfig;
......@@ -56,6 +57,7 @@ import lombok.AllArgsConstructor;
@Service
@Transactional
@AllArgsConstructor
@Slf4j
public class LiveStreamService implements ILiveStreamService {
private final LiveStreamRepository liveStreamRepository;
......@@ -68,7 +70,6 @@ public class LiveStreamService implements ILiveStreamService {
private final AWSConfigProperties awsConfigProps;
private final NameUrl nameUrl;
private final MCRestTemplateService mcRestTemplateService;
Logger logger = LoggerFactory.getLogger(LiveStreamService.class);
......@@ -171,18 +172,18 @@ public class LiveStreamService implements ILiveStreamService {
startDto, LiveStopDto.class);
if (response != null) {
logger.info("Successfully started recording: " + response.toString());
log.info("Successfully started recording: " + response.toString());
liveStream.setStartedAt(ZonedDateTime.now(ZoneOffset.UTC).toLocalDateTime());
liveStream.setStatus(LiveStatus.ONGOING);
liveStream.setFfmpegPid(response.getPid());
liveStreamRepository.save(liveStream);
} else {
logger.error("Response from start-recording was null.");
log.error("Response from start-recording was null.");
}
} catch (ResourceAccessException e) {
logger.error("ResourceAccessException: " + e.getMessage());
log.error("ResourceAccessException: " + e.getMessage());
} catch (Exception e) {
logger.error("Exception: " + e.getMessage());
log.error("Exception: " + e.getMessage());
}
}
......@@ -196,7 +197,7 @@ public class LiveStreamService implements ILiveStreamService {
}
Long pid = liveStream.getFfmpegPid();
liveStream.setStatus(LiveStatus.REVIEW);
liveStream.setVideoLink(liveServerConfig.getCdn() + liveStream.getKeysWork().getKeyStream() + ".mp4");
liveStream.setVideoLink(liveServerConfig.getCdn() + liveStream.getKeysWork().getKeyStream() + ".flv");
liveStreamRepository.save(liveStream);
KeysWork keysWork = keysWorkRepository.findByLiveStream(liveStream);
LiveStopDto stopDto = new LiveStopDto(pid, keysWork.getKeyStream());
......@@ -211,7 +212,7 @@ public class LiveStreamService implements ILiveStreamService {
try{
mcRestTemplateService.postForObject(url, null, Void.class);
} catch (Exception e) {
logger.error("Exception: " + e.getMessage());
log.error("Exception: " + e.getMessage());
}
}
......
0% ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter