Skip to content

Commit

Permalink
[ADD] Review กิจกรรมและค้นหากิจกรรมตามช่วงเวลา Elapse Time
Browse files Browse the repository at this point in the history
  • Loading branch information
wdrdres3qew5ts21 committed Nov 6, 2019
1 parent d5749a9 commit d8cbf1b
Show file tree
Hide file tree
Showing 16 changed files with 285 additions and 127 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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")
Expand All @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -129,6 +130,10 @@ public void setIsEventEnd(boolean isEventEnd) {


public List<Review> getReviewList() {
if(reviewList == null){
reviewList = new ArrayList<Review>();
return reviewList;
}
return reviewList;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -19,6 +20,7 @@ public class Review {
@Id
private String reviewId;

@Indexed
private String uid;

private String displayName;
Expand Down Expand Up @@ -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 + '}';
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ public class User {
private String email;

private String username;

private String displayName;

private String photoUrl;

private String role;

Expand All @@ -43,6 +47,24 @@ public class User {

private List<String> 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() {

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*/
@Repository
public interface EventRepository extends MongoRepository<Event, String> {

public List<Event> findByEventDetailLike(String eventDetail);

public Event findByElasticEventId(String elasticEventId);
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Review, String>{

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ public interface UserEventTicketRepository extends MongoRepository<UserEventTic
public UserEventTicket findByTicketId(String ticketId);

public List<UserEventTicket> findByUid(String uid);

public UserEventTicket findByUidAndElasticEventIdAndIsParticipate(String uid, String elasticEventId, boolean isParticipate);


}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -101,14 +108,21 @@
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.*;
import org.elasticsearch.index.get.GetResult;
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;
Expand Down Expand Up @@ -140,6 +154,9 @@ public class EventService {

@Autowired
private EventBadgeRepository eventBadgeRepository;

@Autowired
private ReviewRepository reviewRepository;

@Autowired
private MongoTemplate mongoTemplate;
Expand Down Expand Up @@ -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<BasicDBObject> 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<BasicDBObject> find = mongoTemplate.find(query, BasicDBObject.class, "events");

if (diffInDays > 1) {
System.err.println("Difference in number of days (2) : " + diffInDays);
Expand All @@ -834,9 +855,10 @@ public void pushNotificationForRemindEvent() {
} else if ((diffHours == 24) && (diffMinutes >= 1)) {
System.err.println("minutes");
}

HashMap<String, String> response = new HashMap<>();

return ResponseEntity.status(HttpStatus.OK).body(find);
}

public ResponseEntity forcePushNotificationFromAdmin(String token, String elasticEventId, String messageDetail) throws FirebaseMessagingException {
Expand All @@ -850,15 +872,15 @@ public ResponseEntity forcePushNotificationFromAdmin(String token, String elasti
elasticEventInDatabase.getEventStartDate();
List<Message> messages = new ArrayList<>();
HashMap<String, String> 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()
.setNotification(new Notification(
elasticEventInDatabase.getEventName(),
messageDetail))
.setToken(userNotification.getNotificationToken())
.setWebpushConfig(WebpushConfig.builder().putAllData(dataPayload).build() )
.setWebpushConfig(WebpushConfig.builder().putAllData(dataPayload).build())
.build()
);
}
Expand Down Expand Up @@ -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<String, String> 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<User> 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<Review> 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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public ResponseEntity findByUId(String id) {

HashMap<String, String> 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<User> findByFirstName(String firstName) {
Expand Down
Loading

0 comments on commit d8cbf1b

Please sign in to comment.