diff --git a/Microservice/EventService/src/main/java/meetu/eventservice/controller/EventController.java b/Microservice/EventService/src/main/java/meetu/eventservice/controller/EventController.java index f702aff..fe8f428 100644 --- a/Microservice/EventService/src/main/java/meetu/eventservice/controller/EventController.java +++ b/Microservice/EventService/src/main/java/meetu/eventservice/controller/EventController.java @@ -5,16 +5,23 @@ */ package meetu.eventservice.controller; +import com.google.firebase.FirebaseApp; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseAuthException; +import com.google.firebase.auth.FirebaseToken; import com.google.firebase.messaging.FirebaseMessagingException; import meetu.eventservice.model.Category; import java.io.IOException; import java.util.HashMap; import meetu.eventservice.service.EventService; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.servlet.http.HttpServletResponse; import meetu.eventservice.model.Badge; import meetu.eventservice.model.Event; import meetu.eventservice.model.EventTicket; +import meetu.eventservice.model.Review; import meetu.eventservice.model.User; import meetu.eventservice.model.UserNotification; import meetu.eventservice.model.UserEventTicket; @@ -122,7 +129,7 @@ public ResponseEntity deleteEventByElasticId(@RequestBody UserEventTicket delet @GetMapping("/test/{elasticEventId}") public ResponseEntity deleteEventByElasticIdTest(@PathVariable String elasticEventId) { eventService.pushNotificationForRemindEvent(); - return null; + return eventService.pushNotificationForRemindEvent(); } @GetMapping("/events/popular") @@ -132,11 +139,10 @@ public ResponseEntity findAllPopularEvent( return eventService.findAllPopularEvent(); } - @PostMapping("/events/popular") - public ResponseEntity reviewEvent( - @RequestParam(required = false, defaultValue = "0") int page, - @RequestParam(required = false, defaultValue = "20") int contentPerPage) { - return eventService.findAllPopularEvent(); + @PostMapping("/event/review") + public ResponseEntity reviewEvent(@RequestHeader(name = "Authorization", required = true) String token,@RequestBody Review userReview) { + + return eventService.userReviewEvent(token,userReview); } @GetMapping("/events") diff --git a/Microservice/EventService/src/main/java/meetu/eventservice/model/Event.java b/Microservice/EventService/src/main/java/meetu/eventservice/model/Event.java index b8d26b6..c9ede80 100644 --- a/Microservice/EventService/src/main/java/meetu/eventservice/model/Event.java +++ b/Microservice/EventService/src/main/java/meetu/eventservice/model/Event.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import org.graalvm.compiler.core.common.util.ReversedList; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Reference; import org.springframework.data.mongodb.core.index.IndexDirection; @@ -129,6 +130,10 @@ public void setIsEventEnd(boolean isEventEnd) { public List getReviewList() { + if(reviewList == null){ + reviewList = new ArrayList(); + return reviewList; + } return reviewList; } diff --git a/Microservice/EventService/src/main/java/meetu/eventservice/model/Review.java b/Microservice/EventService/src/main/java/meetu/eventservice/model/Review.java index 7f4e507..403bc46 100644 --- a/Microservice/EventService/src/main/java/meetu/eventservice/model/Review.java +++ b/Microservice/EventService/src/main/java/meetu/eventservice/model/Review.java @@ -7,6 +7,7 @@ import java.util.Date; import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.Document; /** @@ -19,6 +20,7 @@ public class Review { @Id private String reviewId; + @Indexed private String uid; private String displayName; @@ -99,7 +101,8 @@ public void setReviewDate(Date reviewDate) { @Override public String toString() { - return "Review{" + "reviewId=" + reviewId + ", uid=" + uid + ", elasticEventId=" + elasticEventId + ", rating=" + rating + ", reviewDetail=" + reviewDetail + ", reviewDate=" + reviewDate + '}'; + return "Review{" + "reviewId=" + reviewId + ", uid=" + uid + ", displayName=" + displayName + ", photoUrl=" + photoUrl + ", elasticEventId=" + elasticEventId + ", rating=" + rating + ", reviewDetail=" + reviewDetail + ", reviewDate=" + reviewDate + '}'; } - + + } diff --git a/Microservice/EventService/src/main/java/meetu/eventservice/model/User.java b/Microservice/EventService/src/main/java/meetu/eventservice/model/User.java index c3c40be..bf24cd5 100644 --- a/Microservice/EventService/src/main/java/meetu/eventservice/model/User.java +++ b/Microservice/EventService/src/main/java/meetu/eventservice/model/User.java @@ -22,6 +22,10 @@ public class User { private String email; private String username; + + private String displayName; + + private String photoUrl; private String role; @@ -43,6 +47,24 @@ public class User { private List interest = new ArrayList(); + public String getPhotoUrl() { + return photoUrl; + } + + public void setPhotoUrl(String photoUrl) { + this.photoUrl = photoUrl; + } + + + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + public User() { } diff --git a/Microservice/EventService/src/main/java/meetu/eventservice/repository/EventRepository.java b/Microservice/EventService/src/main/java/meetu/eventservice/repository/EventRepository.java index 64d6274..cc62854 100644 --- a/Microservice/EventService/src/main/java/meetu/eventservice/repository/EventRepository.java +++ b/Microservice/EventService/src/main/java/meetu/eventservice/repository/EventRepository.java @@ -16,7 +16,7 @@ */ @Repository public interface EventRepository extends MongoRepository { - + public List findByEventDetailLike(String eventDetail); public Event findByElasticEventId(String elasticEventId); diff --git a/Microservice/EventService/src/main/java/meetu/eventservice/repository/ReviewRepository.java b/Microservice/EventService/src/main/java/meetu/eventservice/repository/ReviewRepository.java new file mode 100644 index 0000000..5a83f95 --- /dev/null +++ b/Microservice/EventService/src/main/java/meetu/eventservice/repository/ReviewRepository.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package meetu.eventservice.repository; + +import meetu.eventservice.model.Review; +import org.springframework.data.mongodb.repository.MongoRepository; + +/** + * + * @author Test + */ +public interface ReviewRepository extends MongoRepository{ + +} diff --git a/Microservice/EventService/src/main/java/meetu/eventservice/repository/UserEventTicketRepository.java b/Microservice/EventService/src/main/java/meetu/eventservice/repository/UserEventTicketRepository.java index 62a7771..1de1eef 100644 --- a/Microservice/EventService/src/main/java/meetu/eventservice/repository/UserEventTicketRepository.java +++ b/Microservice/EventService/src/main/java/meetu/eventservice/repository/UserEventTicketRepository.java @@ -19,6 +19,8 @@ public interface UserEventTicketRepository extends MongoRepository findByUid(String uid); + + public UserEventTicket findByUidAndElasticEventIdAndIsParticipate(String uid, String elasticEventId, boolean isParticipate); } diff --git a/Microservice/EventService/src/main/java/meetu/eventservice/scheduler/EventScheduler.java b/Microservice/EventService/src/main/java/meetu/eventservice/scheduler/EventScheduler.java index 584f377..5e6aa0b 100644 --- a/Microservice/EventService/src/main/java/meetu/eventservice/scheduler/EventScheduler.java +++ b/Microservice/EventService/src/main/java/meetu/eventservice/scheduler/EventScheduler.java @@ -47,7 +47,7 @@ public class EventScheduler { private RestTemplate restTemplate; // 5 minute ระบบจะทำการ Query ขึ้นมาเช็ค Event ที่จะทำการเตือน - @Scheduled(fixedRate = 300000) +// @Scheduled(fixedRate = 300000) public void cronJobSch() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); Date now = new Date(); diff --git a/Microservice/EventService/src/main/java/meetu/eventservice/service/EventService.java b/Microservice/EventService/src/main/java/meetu/eventservice/service/EventService.java index ce68f0d..7c613ee 100644 --- a/Microservice/EventService/src/main/java/meetu/eventservice/service/EventService.java +++ b/Microservice/EventService/src/main/java/meetu/eventservice/service/EventService.java @@ -8,6 +8,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseAuthException; +import com.google.firebase.auth.FirebaseToken; import com.google.firebase.messaging.AndroidConfig; import com.google.firebase.messaging.BatchResponse; import com.google.firebase.messaging.FirebaseMessaging; @@ -58,16 +61,20 @@ import com.google.firebase.messaging.TopicManagementResponse; import com.google.firebase.messaging.WebpushConfig; import com.mongodb.BasicDBObject; +import com.mongodb.client.model.Aggregates; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; +import java.beans.Expression; import java.nio.charset.Charset; import java.util.Optional; import java.util.Random; import java.util.UUID; +import meetu.eventservice.controller.EventController; import meetu.eventservice.model.Badge; import meetu.eventservice.model.BadgeReward; import meetu.eventservice.model.Category; import meetu.eventservice.model.EventBadge; import meetu.eventservice.model.Organize; +import meetu.eventservice.model.Review; import meetu.eventservice.model.UserEventTicket; import meetu.eventservice.model.UserJoinEvent; import meetu.eventservice.model.UserViewEvent; @@ -101,6 +108,7 @@ import org.springframework.web.client.RestTemplate; import meetu.eventservice.repository.CategoryRepository; import meetu.eventservice.repository.EventBadgeRepository; +import meetu.eventservice.repository.ReviewRepository; import org.apache.commons.lang.RandomStringUtils; import org.elasticsearch.action.update.UpdateRequest; import static org.elasticsearch.common.xcontent.XContentFactory.*; @@ -108,7 +116,13 @@ import org.elasticsearch.search.sort.FieldSortBuilder; import org.springframework.data.domain.Sort; import static org.springframework.data.mongodb.core.aggregation.Aggregation.sort; +import org.springframework.data.mongodb.core.aggregation.AggregationExpression; +import org.springframework.data.mongodb.core.aggregation.ArithmeticOperators; +import org.springframework.data.mongodb.core.aggregation.ComparisonOperators; +import org.springframework.data.mongodb.core.aggregation.ConditionalOperators; +import org.springframework.data.mongodb.core.aggregation.ProjectionOperation; import org.springframework.data.mongodb.core.aggregation.SortOperation; +import org.springframework.data.mongodb.core.query.BasicQuery; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.http.HttpEntity; @@ -140,6 +154,9 @@ public class EventService { @Autowired private EventBadgeRepository eventBadgeRepository; + + @Autowired + private ReviewRepository reviewRepository; @Autowired private MongoTemplate mongoTemplate; @@ -802,30 +819,34 @@ public ResponseEntity deleteEventByElasticIdTest(UserEventTicket deletedEvent) { return null; } - public void pushNotificationForRemindEvent() { + public ResponseEntity pushNotificationForRemindEvent() { Event event = eventRepository.findByElasticEventId("KL3RO24BGta3uOKHWgJy"); Date nowDate = new Date(); Date createEventDate = event.getEventStartDate(); - + long diff = createEventDate.getTime() - nowDate.getTime(); long diffSeconds = diff / 1000 % 60; long diffMinutes = diff / (60 * 1000) % 60; long diffHours = diff / (60 * 60 * 1000); int diffInDays = (int) ((createEventDate.getTime() - nowDate.getTime()) / (1000 * 60 * 60 * 24)); - System.out.println("diff "+ diff); + System.out.println("diff " + diff); System.out.println("diff day " + diffInDays); System.out.println("diff hour " + diffHours); - System.out.println("diff min " + diffMinutes); + System.out.println("diff min " + diffMinutes); System.out.println("diff sec " + diffSeconds); - - - AggregationOperation match = Aggregation.match( - Criteria.where("eventStartDate").lte(new Date()) - .and("eventStartDate").gte( new Date()) - ) ; - SortOperation sortByTicketCreateTime = sort(new Sort(Sort.Direction.DESC, "_id")); - //Aggregation aggregation = Aggregation.newAggregation(lookupOperation, match, sortByTicketCreateTime); - // List results = mongoTemplate.aggregate(aggregation, "userEventTicket", BasicDBObject.class).getMappedResults(); + // "{$expr:{$gt:[ {'$subtract':[ '$date' , '$eventStartDate' ]}, 1000*60*60*2 ]}}" + //BasicDBObject parse = BasicDBObject.parse("{'$gte':[{'$subtract':[ {'$ifNull':['$acceptedDate', {'$date': " + System.currentTimeMillis() + "}]}, '$eventStartDate']},1296000000]}" ); + long DAY_ELASPE = 86400000; + + // work code +// Query query = new BasicQuery("{$expr: {$gte:[{\"$subtract\":[\"$date\",\"$eventStartDate\"]}, "+ DAY_ELASPE +"]} }" ); + Query query = new BasicQuery("{$expr: {$gte:[{\"$subtract\":[ new Date() ,\"$eventStartDate\"]}, " + DAY_ELASPE + "]} }"); + // query= new BasicQuery(" { $project: { time: { $subtract: [ new Date() , \"$eventStartDate\" ] } } }"); + ProjectionOperation projectionOperation = new ProjectionOperation(); + // ต้องลบกันแล้วเพิ่มเวลาออกมาจากระบบ จากนั้นนำเวลาไปเข้า if else push + + // mongoTemplate.aggregate(Aggregates.addFields("dateDifferecne",) , BasicDBObject.class) + List find = mongoTemplate.find(query, BasicDBObject.class, "events"); if (diffInDays > 1) { System.err.println("Difference in number of days (2) : " + diffInDays); @@ -834,9 +855,10 @@ public void pushNotificationForRemindEvent() { } else if ((diffHours == 24) && (diffMinutes >= 1)) { System.err.println("minutes"); } - + HashMap response = new HashMap<>(); + return ResponseEntity.status(HttpStatus.OK).body(find); } public ResponseEntity forcePushNotificationFromAdmin(String token, String elasticEventId, String messageDetail) throws FirebaseMessagingException { @@ -850,7 +872,7 @@ public ResponseEntity forcePushNotificationFromAdmin(String token, String elasti elasticEventInDatabase.getEventStartDate(); List messages = new ArrayList<>(); HashMap dataPayload = new HashMap<>(); - dataPayload.put("link", "https://meetu-69b29.firebaseapp.com/event/"+elasticEventId); + dataPayload.put("link", "https://meetu-69b29.firebaseapp.com/event/" + elasticEventId); for (UserNotification userNotification : userNotificationList) { messages = Arrays.asList( Message.builder() @@ -858,7 +880,7 @@ public ResponseEntity forcePushNotificationFromAdmin(String token, String elasti elasticEventInDatabase.getEventName(), messageDetail)) .setToken(userNotification.getNotificationToken()) - .setWebpushConfig(WebpushConfig.builder().putAllData(dataPayload).build() ) + .setWebpushConfig(WebpushConfig.builder().putAllData(dataPayload).build()) .build() ); } @@ -894,4 +916,46 @@ public ResponseEntity subscribeEventTopic(String notificationToken, String subsc return ResponseEntity.status(HttpStatus.CREATED).build(); } + public ResponseEntity userReviewEvent(String token, Review userReview) { + HashMap response = new HashMap<>(); + Event eventInDatabase = eventRepository.findByElasticEventId(userReview.getElasticEventId()); + System.out.println("--- Review ----"); + System.out.println(userReview); + token = token.replace("Bearer ", ""); + if (eventInDatabase != null) { + try { + FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(token); + String uid = decodedToken.getUid(); + try { + ResponseEntity userResponse = restTemplate.getForEntity(USERSERVICE_URL + "/user/" + uid, User.class); + User user = userResponse.getBody(); + UserEventTicket eventThatUserJoin = userEventTicketRespository.findByUidAndElasticEventIdAndIsParticipate(uid, eventInDatabase.getElasticEventId(), true); + if (eventThatUserJoin!=null) { + userReview.setDisplayName(user.getDisplayName()); + userReview.setPhotoUrl(user.getPhotoUrl()); + userReview.setUid(user.getUid()); + userReview.setReviewDate(new Date()); + List reviewList = eventInDatabase.getReviewList(); + reviewList.add(userReview); + reviewRepository.saveAll(reviewList); + eventRepository.save(eventInDatabase); + response.put("response", "Not Found Event To Review !!!"); + return ResponseEntity.status(HttpStatus.CREATED).body(userReview); + } + } catch (HttpStatusCodeException codeException) { + if (codeException.getStatusCode() == HttpStatus.NOT_FOUND) { + response.put("response", "Not found this user so you can't comment!!"); + }; + } + + } catch (FirebaseAuthException ex) { + Logger.getLogger(EventController.class.getName()).log(Level.SEVERE, null, ex); + response.put("response", "You need to be login !"); + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(response); + } + } + response.put("response", "Not Found Event To Review !!!"); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } + } diff --git a/Microservice/UserService/src/main/java/meetu/userservice/service/UserService.java b/Microservice/UserService/src/main/java/meetu/userservice/service/UserService.java index 0563306..1de1fc1 100644 --- a/Microservice/UserService/src/main/java/meetu/userservice/service/UserService.java +++ b/Microservice/UserService/src/main/java/meetu/userservice/service/UserService.java @@ -92,7 +92,7 @@ public ResponseEntity findByUId(String id) { HashMap response = new HashMap(); response.put("message", "not found user in database!"); - return ResponseEntity.status(HttpStatus.OK).body(response); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); } public List findByFirstName(String firstName) { diff --git a/mongoaggregate.txt b/mongoaggregate.txt new file mode 100644 index 0000000..8cec0b1 --- /dev/null +++ b/mongoaggregate.txt @@ -0,0 +1,44 @@ +{$expr:{$gt:[{'$subtract':['$lastUpdate','$eventStartDate']},1000*60*60*24]}} + + +// work +db.events.find( {$expr: {$lte:[{"$subtract":["$date","$eventStartDate"]}, 60000000] } } ) + + +// เวลาผ่านไปแล้วแต่ยังไม่เคยปลัก flag ก็ต้องดึงขึ้นมาแปะป้าย + +// เวลาผ่านไปแล้ว + +db.events.find( {$expr: { $or: [ {$lte:[{"$subtract":["$date","$eventStartDate"]}, 60000000] } , {$eq: ["$isEventStart", false] } ]} } ) + + + +db.events.find( $expr: { $and: [ ] } ) + + + + +db.events.aggregate( [ { $project: { time: { $subtract: [ new Date() , "$eventStartDate" ] } } }, { + $addFields: { + totalHomework: { $subtract: [ new Date() , "$eventStartDate" ] } , + totalQuiz: { $subtract: [ new Date() , "$eventStartDate" ] } + } + } ] ); + + + +db.events.aggregate( [ { $project: { totalHourSpent:{$divide : [{$subtract: ["$date","$date"]}, 3600000] } } } ] ); + + +db.events.aggregate([ + { + $addFields: { + dateDifference: { + $subtract: [ + "$date", + "$eventStartDate" + ] + } + } + }, +]) \ No newline at end of file diff --git a/nuxt-firebase-auth-master/components/ratingEvent.vue b/nuxt-firebase-auth-master/components/ratingEvent.vue index 0bb2227..14db252 100644 --- a/nuxt-firebase-auth-master/components/ratingEvent.vue +++ b/nuxt-firebase-auth-master/components/ratingEvent.vue @@ -1,77 +1,89 @@ @@ -80,7 +92,5 @@ max-width: 100%; background-color: #eeeeee; font-family: Roboto; - } - \ No newline at end of file diff --git a/nuxt-firebase-auth-master/pages/event/_elasticEventId.vue b/nuxt-firebase-auth-master/pages/event/_elasticEventId.vue index 3880e61..88d1311 100644 --- a/nuxt-firebase-auth-master/pages/event/_elasticEventId.vue +++ b/nuxt-firebase-auth-master/pages/event/_elasticEventId.vue @@ -354,8 +354,8 @@ export default { } }) .then(reserveTicket => { - console.log(reserveTicket); - this.reserveTicket = reserveTicket; + console.log(reserveTicket.data); + this.reserveTicket = reserveTicket.data; this.isViewTicketDetail = !this.isViewTicketDetail; }) .catch(error => { diff --git a/nuxt-firebase-auth-master/pages/testRating.vue b/nuxt-firebase-auth-master/pages/testRating.vue index 090d1ae..ebdee5c 100644 --- a/nuxt-firebase-auth-master/pages/testRating.vue +++ b/nuxt-firebase-auth-master/pages/testRating.vue @@ -1,8 +1,6 @@ diff --git a/nuxt-firebase-auth-master/pages/ticket/_ticketId.vue b/nuxt-firebase-auth-master/pages/ticket/_ticketId.vue index fb8ca9e..d373119 100644 --- a/nuxt-firebase-auth-master/pages/ticket/_ticketId.vue +++ b/nuxt-firebase-auth-master/pages/ticket/_ticketId.vue @@ -1,9 +1,12 @@ @@ -52,16 +64,21 @@