feat: update backend

This commit is contained in:
Laureηt 2022-05-29 09:49:07 +02:00
parent 21568c4d0f
commit 9f58270be8
No known key found for this signature in database
GPG key ID: D88C6B294FD40994
4 changed files with 56 additions and 26 deletions

View file

@ -1,6 +1,7 @@
package com.pixels.beans;
import javax.persistence.*;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@ -27,6 +28,7 @@ public class Pixel implements Serializable {
// prix du pixel à l'achat
@NonNull
@NotNull
@Min(value = 0)
private Integer price;
// couleur du pixel sur la peinture
@ -38,7 +40,6 @@ public class Pixel implements Serializable {
// petit mot écrit par le user
@NonNull
@NotBlank
private String description;
// propriétaire actuel du pixel

View file

@ -1,6 +1,7 @@
package com.pixels.beans;
import javax.persistence.*;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@ -36,6 +37,7 @@ public class User implements Serializable {
// le solde de l'utilisateur
@NotNull
@Min(value = 0)
private Integer balance = 0;
@Column(unique = true)

View file

@ -8,6 +8,7 @@ import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.ws.rs.Consumes;
import javax.ws.rs.CookieParam;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.POST;
@ -70,36 +71,17 @@ public class PixelService {
@POST
@Path("{id}/buy/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String buy_pixel(@PathParam("id") Long id, @CookieParam("JSESSIONID") Cookie cookie, String json) {
// on récupère les informations du changement
Pixel pixel_json = gson.fromJson(json, Pixel.class);
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void buy_pixel(@PathParam("id") Long id, @CookieParam("JSESSIONID") Cookie cookie) {
// on récupère le pixel de la db via son id
Pixel pixel = em.find(Pixel.class, id);
// on récupère le nouveau proprio
User user = User.fromSessionID(cookie.getValue(), em);
if (user.getBalance() >= pixel.getPrice() && pixel_json.getPrice() > pixel.getPrice()) {
// on récupère l'ancien owner
User old_owner = pixel.getOwner();
// on update le pixel
if (user.getBalance() >= pixel.getPrice()) {
// on update l'owner
pixel.setOwner(user);
pixel.setColor(pixel_json.getColor());
pixel.setDescription(pixel_json.getDescription());
pixel.setPrice(pixel_json.getPrice());
//Si le user possède le pixel on le débite pas
if (old_owner.getUsername().equals(user.getUsername())){
// on débite le user
user.setBalance(user.getBalance() - pixel_json.getPrice());
// on crédite l'ancien owner
old_owner.setBalance(old_owner.getBalance() + pixel_json.getPrice());
}
// on ajoute la transaction
Date now = new Date(System.currentTimeMillis());
@ -110,8 +92,33 @@ public class PixelService {
em.merge(pixel);
em.merge(user);
}
return gson.toJson(pixel);
}
@POST
@Path("{id}/modify/")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void modify(@PathParam("id") Long id, @CookieParam("JSESSIONID") Cookie cookie,
@FormParam("red") int red, @FormParam("green") int green, @FormParam("blue") int blue,
@FormParam("price") int price, @FormParam("description") String description) {
// on récupère le pixel de la db via son id
Pixel pixel = em.find(Pixel.class, id);
// on récupère le nouveau proprio
User user = User.fromSessionID(cookie.getValue(), em);
if (user.equals(pixel.getOwner())) {
pixel.setPrice(price);
pixel.setDescription(description);
pixel.setColor(String.format("%02X%02X%02X", red, green, blue));
// on ajoute la transaction
Date now = new Date(System.currentTimeMillis());
Transaction new_transaction = new Transaction(now, pixel);
em.persist(new_transaction);
// on commit les modifs dans la db
em.merge(pixel);
em.merge(user);
}
}
}

View file

@ -140,4 +140,24 @@ public class UserService {
LOGGER.info("user not logged in, cannot logout");
}
}
@POST
@Path("pay")
public void pay(@CookieParam("JSESSIONID") Cookie cookie, @FormParam("amount") int amount) {
if (amount > 0) {
try {
// on trouve l'utilisateur connecté via son sessionID
User user = User.fromSessionID(cookie.getValue(), em);
// on rajoute l'argent
user.setBalance(user.getBalance() + amount);
// on commit les modifs dans la db
em.merge(user);
} catch (NoResultException e) {
LOGGER.info("user not logged in, cannot logout");
}
}
}
}