package expense import ( "net/http" "nos-comptes/handler" "nos-comptes/internal/storage/dao/postgresql" "nos-comptes/internal/storage/model" "nos-comptes/internal/storage/validators" "nos-comptes/internal/utils" "github.com/gin-gonic/gin" ) type Context struct { service *Service db *Database *handler.Context } func (c *Context) CreateAnExpense(gc *gin.Context) { accountID := gc.Param("accountId") var expense Expense var expenseEditable ExpenseEditable if err := gc.BindJSON(&expenseEditable); err != nil { utils.JSONError(gc.Writer, validators.NewDataValidationAPIError(err)) return } expense = Expense{ExpenseEditable: expenseEditable, AccountId: accountID} err := c.service.CreateExpense(&expense) if err != nil { utils.GetLogger().Info(err) utils.JSONErrorWithMessage(gc.Writer, model.ErrInternalServer, err.Error()) return } utils.JSON(gc.Writer, http.StatusCreated, expense) } func (c *Context) DeleteExpense(gc *gin.Context) { } func (c *Context) GetAllExpenses(gc *gin.Context) { accountId := gc.Param("accountId") expenses, err := c.service.GetAllExpensesOfAnAccount(accountId) if e, ok := err.(*model.APIError); ok { utils.GetLoggerFromCtx(gc).WithError(err).WithField("type", e.Type).Error("error GetAllExpenses: get expenses") utils.JSONErrorWithMessage(gc.Writer, *e, e.Description) } else if err != nil { utils.GetLoggerFromCtx(gc).WithError(err).Error("error while get expenses") utils.JSONError(gc.Writer, model.ErrInternalServer) return } if len(expenses) == 0 { utils.JSON(gc.Writer, http.StatusNoContent, nil) } else { utils.JSON(gc.Writer, http.StatusOK, expenses) } } func (c *Context) GetAnExpenses(context *gin.Context) { } func NewHandler(ctx *handler.Context, db *postgresql.DatabasePostgreSQL) *Context { database := NewDatabase(db) service := NewService(database) return &Context{service: service, db: database, Context: ctx} }