Skip to content
Extraits de code Groupes Projets
Valider d2293013 rédigé par oussama aftys's avatar oussama aftys
Parcourir les fichiers

added live pagination in client side

parent a0708591
Branches
2 requêtes de fusion!27Resolve MS-139 "Feature/",!26added live pagination in client side
Pipeline #18911 en échec avec les étapes
in 21 secondes
Affichage de
avec 48 ajouts et 18 suppressions
## [0.0.9-RELEASE]
### Added
- optimized the live viewres block to use ip instead of senderName
- added live pagination in client side
## [0.0.8-RELEASE]
### Added
......
......@@ -13,6 +13,7 @@ import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration;
import org.springframework.web.socket.handler.WebSocketHandlerDecorator;
import org.springframework.web.socket.handler.WebSocketHandlerDecoratorFactory;
......@@ -21,7 +22,6 @@ import org.springframework.web.socket.handler.WebSocketHandlerDecoratorFactory;
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
private static final Logger logger = LoggerFactory.getLogger(WebSocketConfig.class);
private final AtomicInteger connectedClients = new AtomicInteger(0);
@Override
......@@ -30,8 +30,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
registry.addEndpoint("/ws")
.setAllowedOriginPatterns("*")
.withSockJS()
.setWebSocketEnabled(true)
.setClientLibraryUrl("https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.5.1/sockjs.min.js");
.setClientLibraryUrl("https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.5.1/sockjs.min.js");
}
@Override
......@@ -40,23 +39,28 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void configureWebSocketTransport(
@NonNull final org.springframework.web.socket.config.annotation.WebSocketTransportRegistration registration) {
public void configureWebSocketTransport(@NonNull WebSocketTransportRegistration registration) {
registration.addDecoratorFactory(new WebSocketHandlerDecoratorFactory() {
@Override
public @NonNull WebSocketHandler decorate(@NonNull final WebSocketHandler handler) {
public @NonNull WebSocketHandler decorate(@NonNull WebSocketHandler handler) {
return new WebSocketHandlerDecorator(handler) {
@Override
public void afterConnectionEstablished(@NonNull final WebSocketSession session) throws Exception {
public void afterConnectionEstablished(@NonNull WebSocketSession session) throws Exception {
connectedClients.incrementAndGet();
super.afterConnectionEstablished(session);
}
@Override
public void handleTransportError(@NonNull WebSocketSession session,
@NonNull Throwable exception) throws Exception {
connectedClients.decrementAndGet();
super.handleTransportError(session, exception);
}
@Override
public void afterConnectionClosed(@NonNull WebSocketSession session,
@NonNull CloseStatus closeStatus) throws Exception {
@NonNull CloseStatus closeStatus) throws Exception {
connectedClients.decrementAndGet();
super.afterConnectionClosed(session, closeStatus);
}
......@@ -65,8 +69,10 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
});
}
/**
* Expose the current number of connected clients.
*/
public int getConnectedClientsCount() {
return connectedClients.get();
}
}
......@@ -51,13 +51,26 @@ public class LiveStreamController {
@GetMapping("/client")
@PreAuthorize("@securityCustomExpressions.isClientTrusted(#requestAuthorization)")
public List<LiveStreamResponse> getAllStreamsForClient(@RequestHeader String requestAuthorization,
public ResponseEntity<Page<LiveStreamResponse>> getAllStreamsForClient(@RequestHeader String requestAuthorization,
@RequestParam(value = "search", defaultValue = "") String search,
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "20") int size,
@RequestParam(value = "size", defaultValue = "8") int size,
@RequestParam(value = "sortBy", defaultValue = "startDate") String sortBy,
@RequestParam(value = "sortDir", defaultValue = "DESC") String sortDir) {
return liveStreamService.getAllLiveStreamsForClient(search,page, size,sortBy,sortDir);
Page<LiveStreamResponse> liveStreamsPage = liveStreamService.getAllLiveStreamsForClientPaginated(search, page, size, sortBy, sortDir);
return ResponseEntity.ok(liveStreamsPage);
}
@GetMapping("/client/paginated")
@PreAuthorize("@securityCustomExpressions.isClientTrusted(#requestAuthorization)")
public ResponseEntity<Page<LiveStreamResponse>> getAllStreamsForClientPaginated(@RequestHeader String requestAuthorization,
@RequestParam(value = "search", defaultValue = "") String search,
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "8") int size,
@RequestParam(value = "sortBy", defaultValue = "startDate") String sortBy,
@RequestParam(value = "sortDir", defaultValue = "DESC") String sortDir) {
Page<LiveStreamResponse> liveStreamsPage = liveStreamService.getAllLiveStreamsForClientPaginated(search, page, size, sortBy, sortDir);
return ResponseEntity.ok(liveStreamsPage);
}
@GetMapping("/products")
......
......@@ -17,7 +17,7 @@ import lombok.Setter;
public class ChatMessageRequest {
private MessageType type;
private String content;
private Long sender;
private String sender;
private String senderName;
ChatMessage parent;
private Long liveStream;
......
......@@ -17,7 +17,7 @@ import lombok.Setter;
public class ChatMessageResponse {
private Long id;
private String content;
private Long sender;
private String sender;
private String senderName;
private boolean pinned;
private Long liveStream;
......@@ -31,7 +31,7 @@ public class ChatMessageResponse {
this.type = type;
}
public ChatMessageResponse(Long id, String content, Long sender, String senderName, boolean pinned,
public ChatMessageResponse(Long id, String content, String sender, String senderName, boolean pinned,
Long liveStream, Long parentId, String parentContent,
String parentSenderName, boolean isAdmin) {
this.id = id;
......
......@@ -26,7 +26,7 @@ public class ChatMessage {
private MessageType type;
private String content;
private Long sender;
private String sender;
private String senderName;
@Column(name = "is_admin")
......
......@@ -29,6 +29,9 @@ public interface LiveStreamRepository extends JpaRepository<LiveStream, Long> {
@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 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")
Page<LiveStreamResponse> findAllLiveStreamsForClientPaginated(@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);
......
......@@ -20,6 +20,7 @@ import com.marketingconfort.starter.core.exceptions.S3FunctionalException;
public interface ILiveStreamService {
public Page<LiveStreamResponse> getLiveStreams(String search, LiveStatus status, int page, int size, String sortBy, String sortOrder);
public List<LiveStreamResponse> getAllLiveStreamsForClient(String search, int page, int size, String sortBy, String sortDir) ;
public Page<LiveStreamResponse> getAllLiveStreamsForClientPaginated(String search, int page, int size, String sortBy, String sortDir);
public LiveStreamDto getLiveStream(Long id);
public LiveStreamResponse createLiveStream(LiveStreamDto liveStreamDto, MultipartFile image) throws S3FunctionalException, IOException;
public void startLiveStream(Long id) throws JsonProcessingException ;
......
......@@ -251,6 +251,12 @@ public class LiveStreamService implements ILiveStreamService {
return liveStreamRepository.findAllLiveStreamsForClient(search, pageable);
}
@Override
public Page<LiveStreamResponse> getAllLiveStreamsForClientPaginated(String search, int page, int size, String sortBy, String sortDir) {
Pageable pageable = PageRequest.of(page, size, Sort.Direction.fromString(sortDir), sortBy);
return liveStreamRepository.findAllLiveStreamsForClientPaginated(search, pageable);
}
@Override
public LiveStreamDto getLiveStream(Long id) {
LiveStream liveStream = liveStreamRepository.findById(id)
......
......@@ -8,7 +8,7 @@ spring:
application:
name: mydressin-stream-service
profiles:
active: ${PROFILE:pro}
active: ${PROFILE:rec}
servlet:
multipart:
max-file-size: 90000MB
......
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