-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #7 from morteza-nouri/CA2
CA2 implement all API's
- Loading branch information
Showing
52 changed files
with
1,151 additions
and
169 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,34 +1,38 @@ | ||
package ir.ut.ece.ie; | ||
|
||
import com.google.gson.Gson; | ||
import com.google.gson.GsonBuilder; | ||
import ir.ut.ece.ie.util.Dispatcher; | ||
import ir.ut.ece.ie.util.ResponseModel; | ||
import io.javalin.Javalin; | ||
import ir.ut.ece.ie.javalinhandlers.BuyListHandler; | ||
import ir.ut.ece.ie.javalinhandlers.CommodityHandler; | ||
import ir.ut.ece.ie.javalinhandlers.ProviderHandler; | ||
import ir.ut.ece.ie.javalinhandlers.UserHandler; | ||
import ir.ut.ece.ie.util.DataInitializer; | ||
import ir.ut.ece.ie.util.Path; | ||
|
||
import java.util.Scanner; | ||
import java.io.IOException; | ||
|
||
public class OnlineShopApplication { | ||
public static void main(String[] args) { | ||
run(); | ||
} | ||
public static void main(String[] args) throws IOException, InterruptedException { | ||
DataInitializer.loadData("http://5.253.25.110:5000"); | ||
|
||
Javalin app = Javalin.create().start(8000); | ||
|
||
// Commodity | ||
app.get(Path.Web.COMMODITIES, CommodityHandler.getAllCommodities); | ||
app.get(Path.Web.COMMODITY, CommodityHandler.getCommodityById); | ||
app.get(Path.Web.COMMODITIES_IN_PRICE_RANGE, CommodityHandler.getAllCommoditiesInPriceRange); | ||
app.get(Path.Web.COMMODITIES_IN_CATEGORY, CommodityHandler.getAllCommoditiesInCategory); | ||
app.post(Path.Web.RATE_COMMODITY, CommodityHandler.rateCommodity); | ||
app.post(Path.Web.VOTE_COMMENT, CommodityHandler.voteComment); | ||
|
||
// Provider | ||
app.get(Path.Web.PROVIDER, ProviderHandler.getProvider); | ||
|
||
// User | ||
app.get(Path.Web.USER, UserHandler.getUser); | ||
app.get(Path.Web.ADD_CREDIT, UserHandler.addCredit); | ||
|
||
public static void run() { | ||
Dispatcher dispatcher = new Dispatcher(); | ||
Scanner scanner = new Scanner(System.in); | ||
GsonBuilder builder = new GsonBuilder(); | ||
Gson gson = builder.create(); | ||
|
||
ResponseModel responseModel = new ResponseModel(); | ||
while (scanner.hasNextLine()) { | ||
String request = scanner.nextLine(); | ||
try { | ||
responseModel.setData(dispatcher.dispatch(request)); | ||
responseModel.setSuccess(true); | ||
} catch (Exception e) { | ||
responseModel.setData(e.getMessage()); | ||
responseModel.setSuccess(false); | ||
} | ||
System.out.println(gson.toJson(responseModel)); | ||
} | ||
// Buy List | ||
app.post(Path.Web.ADD_TO_BUYLIST, BuyListHandler.addToBuyList); | ||
app.post(Path.Web.REMOVE_FROM_BUYLIST, BuyListHandler.removeFromBuyList); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
25 changes: 25 additions & 0 deletions
25
src/main/java/ir/ut/ece/ie/controller/commodity/CommentController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package ir.ut.ece.ie.controller.commodity; | ||
|
||
import ir.ut.ece.ie.domain.commodity.Comment; | ||
import ir.ut.ece.ie.service.commodity.CommentService; | ||
import ir.ut.ece.ie.service.commodity.VoteService; | ||
|
||
import java.util.List; | ||
|
||
public class CommentController { | ||
private final CommentService commentService; | ||
private final VoteService voteService; | ||
|
||
public CommentController(CommentService commentService, VoteService voteService) { | ||
this.commentService = commentService; | ||
this.voteService = voteService; | ||
} | ||
|
||
public List<Comment> getCommentsOfCommodity(Long commodityId) { | ||
return commentService.getCommentsOfCommodity(commodityId).stream().map(comment -> { | ||
comment.setLikes(voteService.getNumberOfLikesOfComment(comment.getId())); | ||
comment.setDislikes(voteService.getNumberOfDislikesOfComment(comment.getId())); | ||
return comment; | ||
}).toList(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
src/main/java/ir/ut/ece/ie/controller/commodity/VoteController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package ir.ut.ece.ie.controller.commodity; | ||
|
||
import ir.ut.ece.ie.domain.commodity.Vote; | ||
import ir.ut.ece.ie.domain.user.User; | ||
import ir.ut.ece.ie.exception.OnlineShopException; | ||
import ir.ut.ece.ie.service.commodity.VoteService; | ||
import ir.ut.ece.ie.service.user.UserService; | ||
|
||
import java.util.Optional; | ||
|
||
public class VoteController { | ||
private final VoteService voteService; | ||
private final UserService userService; | ||
|
||
public VoteController(VoteService voteService, UserService userService) { | ||
this.voteService = voteService; | ||
this.userService = userService; | ||
} | ||
|
||
public Vote addVote(Vote vote) { | ||
Optional<User> user = userService.getUser(vote.getUsername()); | ||
if (user.isEmpty()) | ||
throw new OnlineShopException("User not found"); | ||
if (voteService.findByUsernameAndCommentId(vote.getUsername(), vote.getCommentId()).isPresent()) | ||
voteService.deleteByUsernameAndCommentId(vote.getUsername(), vote.getCommentId()); | ||
return voteService.save(vote); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package ir.ut.ece.ie.domain.commodity; | ||
|
||
import lombok.Data; | ||
|
||
@Data | ||
public class Comment { | ||
private Long id; | ||
private Long commodityId; | ||
private String userEmail; | ||
private String text; | ||
private String date; | ||
private Integer likes; | ||
private Integer dislikes; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package ir.ut.ece.ie.domain.commodity; | ||
|
||
import lombok.Data; | ||
|
||
import java.util.Objects; | ||
|
||
@Data | ||
public class Vote { | ||
private String username; | ||
private Long commentId; | ||
private Status vote; | ||
|
||
public Vote(String username, Long commentId) { | ||
this.username = username; | ||
this.commentId = commentId; | ||
} | ||
|
||
public Vote(String username, Long commentId, Status vote) { | ||
this.username = username; | ||
this.commentId = commentId; | ||
this.vote = vote; | ||
} | ||
|
||
@Override | ||
public boolean equals(Object o) { | ||
if (this == o) return true; | ||
if (o == null || getClass() != o.getClass()) return false; | ||
Vote vote = (Vote) o; | ||
return commentId.equals(vote.commentId) && Objects.equals(username, vote.username); | ||
} | ||
|
||
public enum Status { | ||
LIKE(1), DISLIKE(-1); | ||
|
||
public final Integer value; | ||
|
||
Status(Integer value) { | ||
this.value = value; | ||
} | ||
|
||
public static Status enumOf(int value) { | ||
return value == 1 ? LIKE : DISLIKE; | ||
} | ||
} | ||
|
||
} |
26 changes: 26 additions & 0 deletions
26
src/main/java/ir/ut/ece/ie/javalinhandlers/BuyListHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package ir.ut.ece.ie.javalinhandlers; | ||
|
||
import io.javalin.http.Handler; | ||
import ir.ut.ece.ie.controller.buylist.BuyListController; | ||
import ir.ut.ece.ie.util.Factory; | ||
import ir.ut.ece.ie.util.Path; | ||
|
||
public class BuyListHandler { | ||
private static final BuyListController buyListController = Factory.getBuyListController(); | ||
public static Handler addToBuyList = ctx -> { | ||
try { | ||
buyListController.addToBuyList(ctx.pathParam("username"), Long.valueOf(ctx.pathParam("commodityId"))); | ||
ctx.render(Path.Template.SUCCESS); | ||
} catch (Exception e) { | ||
ctx.result(e.getMessage()); | ||
} | ||
}; | ||
public static Handler removeFromBuyList = ctx -> { | ||
try { | ||
buyListController.removeFromBuyList(ctx.pathParam("username"), Long.valueOf(ctx.pathParam("commodityId"))); | ||
ctx.render(Path.Template.SUCCESS); | ||
} catch (Exception e) { | ||
ctx.result(e.getMessage()); | ||
} | ||
}; | ||
} |
65 changes: 65 additions & 0 deletions
65
src/main/java/ir/ut/ece/ie/javalinhandlers/CommodityHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
package ir.ut.ece.ie.javalinhandlers; | ||
|
||
import io.javalin.http.Handler; | ||
import ir.ut.ece.ie.controller.commodity.CommentController; | ||
import ir.ut.ece.ie.controller.commodity.CommodityController; | ||
import ir.ut.ece.ie.controller.commodity.VoteController; | ||
import ir.ut.ece.ie.domain.commodity.Score; | ||
import ir.ut.ece.ie.domain.commodity.Vote; | ||
import ir.ut.ece.ie.domain.user.User; | ||
import ir.ut.ece.ie.util.Factory; | ||
import ir.ut.ece.ie.util.Path; | ||
|
||
import java.util.Collections; | ||
import java.util.Map; | ||
|
||
public class CommodityHandler { | ||
private static final CommodityController commodityController = Factory.getCommodityController(); | ||
private static final CommentController commentController = Factory.getCommentController(); | ||
private static final VoteController voteController = Factory.getVoteController(); | ||
|
||
public static Handler getAllCommodities = ctx -> | ||
ctx.render( | ||
Path.Template.COMMODITIES, | ||
Collections.singletonMap("commodities", commodityController.getCommodities())); | ||
|
||
public static Handler getCommodityById = ctx -> | ||
ctx.render( | ||
Path.Template.ONE_COMMODITY, Map.of( | ||
"commodity", commodityController.getCommodityById(Long.valueOf(ctx.pathParam("commodity_id"))), | ||
"comments", commentController.getCommentsOfCommodity(Long.valueOf(ctx.pathParam("commodity_id")))) | ||
); | ||
public static Handler getAllCommoditiesInPriceRange = ctx -> | ||
ctx.render(Path.Template.COMMODITIES, Collections.singletonMap("commodities", | ||
commodityController.getCommoditiesInPriceRange( | ||
Long.valueOf(ctx.pathParam("start_price")), | ||
Long.valueOf(ctx.pathParam("end_price"))))); | ||
|
||
public static Handler getAllCommoditiesInCategory = ctx -> | ||
ctx.render(Path.Template.COMMODITIES, Collections.singletonMap("commodities", | ||
commodityController.getCommoditiesByCategory(ctx.pathParam("category")))); | ||
|
||
public static Handler rateCommodity = ctx -> { | ||
try { | ||
String username = ctx.pathParam("username"); | ||
String commodityId = ctx.pathParam("commodityId"); | ||
String rate = ctx.pathParam("rate"); | ||
commodityController.rateCommodity(new Score(username, Long.valueOf(commodityId), Integer.valueOf(rate))); | ||
ctx.render(Path.Template.SUCCESS); | ||
} catch (Exception e) { | ||
ctx.result(e.getMessage()); | ||
} | ||
}; | ||
|
||
public static Handler voteComment = ctx -> { | ||
try { | ||
String username = ctx.pathParam("username"); | ||
String commodityId = ctx.pathParam("commodityId"); | ||
int vote = Integer.parseInt(ctx.pathParam("vote")); | ||
voteController.addVote(new Vote(username, Long.parseLong(commodityId), Vote.Status.enumOf(vote))); | ||
ctx.render(Path.Template.SUCCESS); | ||
} catch (Exception e) { | ||
ctx.result(e.getMessage()); | ||
} | ||
}; | ||
} |
Oops, something went wrong.