package io.budgetapp.resource;
import io.budgetapp.model.Point;
import io.budgetapp.model.Transaction;
import io.budgetapp.model.User;
import io.budgetapp.model.form.TransactionForm;
import io.budgetapp.service.FinanceService;
import io.dropwizard.auth.Auth;
import io.dropwizard.hibernate.UnitOfWork;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.List;
/**
*
*/
@Path(ResourceURL.TRANSACTION)
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class TransactionResource extends AbstractResource {
private final FinanceService financeService;
public TransactionResource(FinanceService financeService) {
this.financeService = financeService;
}
@Override
public String getPath() {
return ResourceURL.TRANSACTION;
}
@GET
@UnitOfWork
public List<Transaction> findAllTransactions(@Auth User user, @QueryParam("limit") Integer limit) {
return financeService.findRecentTransactions(user, limit);
}
@POST
@UnitOfWork
public Response add(@Auth User user, TransactionForm transactionForm) {
Transaction transaction = financeService.addTransaction(user, transactionForm);
return created(transaction, transaction.getId());
}
@GET
@UnitOfWork
@Path("/{id}")
public Transaction findById(@PathParam("id") long id) {
return financeService.findTransactionById(id);
}
@DELETE
@UnitOfWork
@Path("/{id}")
public Response delete(@Auth User user, @PathParam("id") long id) {
boolean deleted = financeService.deleteTransaction(user, id);
if(deleted) {
return deleted();
} else {
return notFound();
}
}
@GET
@UnitOfWork
@Path("/summary")
public List<Point> findSummary(@Auth User user, @QueryParam("month") Integer month, @QueryParam("year") Integer year) {
return financeService.findTransactionUsage(user, month, year);
}
@GET
@UnitOfWork
@Path("/monthly")
public List<Point> findMonthly(@Auth User user) {
return financeService.findMonthlyTransactionUsage(user);
}
@GET
@UnitOfWork
@Path("/today")
public Response findTodayRecurringTransactions(@Auth User user) {
return ok(financeService.findTodayRecurringsTransactions(user));
}
}