package handlers import ( "ttime/internal/database" "ttime/internal/types" "github.com/gofiber/fiber/v2" ) // The actual interface that we will use type GlobalState interface { Register(c *fiber.Ctx) error // To register a new user UserDelete(c *fiber.Ctx) error // To delete a user // LoginPost(c *fiber.Ctx) error // To get the token // LoginUpdate(c *fiber.Ctx) error // To renew the token // CreateProject(c *fiber.Ctx) error // To create a new project // GetProjects(c *fiber.Ctx) error // To get all projects // GetProject(c *fiber.Ctx) error // To get a specific project // UpdateProject(c *fiber.Ctx) error // To update a project // DeleteProject(c *fiber.Ctx) error // To delete a project // CreateTask(c *fiber.Ctx) error // To create a new task // GetTasks(c *fiber.Ctx) error // To get all tasks // GetTask(c *fiber.Ctx) error // To get a specific task // UpdateTask(c *fiber.Ctx) error // To update a task // DeleteTask(c *fiber.Ctx) error // To delete a task // CreateCollection(c *fiber.Ctx) error // To create a new collection // GetCollections(c *fiber.Ctx) error // To get all collections // GetCollection(c *fiber.Ctx) error // To get a specific collection // UpdateCollection(c *fiber.Ctx) error // To update a collection // DeleteCollection(c *fiber.Ctx) error // To delete a collection // SignCollection(c *fiber.Ctx) error // To sign a collection GetButtonCount(c *fiber.Ctx) error // For demonstration purposes IncrementButtonCount(c *fiber.Ctx) error // For demonstration purposes } // "Constructor" func NewGlobalState(db database.Database) GlobalState { return &GState{Db: db, ButtonCount: 0} } // The global state, which implements all the handlers type GState struct { Db database.Database ButtonCount int } func (gs *GState) Register(c *fiber.Ctx) error { u := new(types.User) if err := c.BodyParser(u); err != nil { return c.Status(400).SendString(err.Error()) } if err := gs.Db.AddUser(u.Username, u.Password); err != nil { return c.Status(500).SendString(err.Error()) } return c.Status(200).SendString("User added") } // This path should obviously be protected in the future // UserDelete deletes a user from the database func (gs *GState) UserDelete(c *fiber.Ctx) error { u := new(types.User) if err := c.BodyParser(u); err != nil { return c.Status(400).SendString(err.Error()) } if err := gs.Db.RemoveUser(u.Username); err != nil { return c.Status(500).SendString(err.Error()) } return c.Status(200).SendString("User deleted") } func (gs *GState) GetButtonCount(c *fiber.Ctx) error { return c.Status(200).JSON(fiber.Map{"pressCount": gs.ButtonCount}) } func (gs *GState) IncrementButtonCount(c *fiber.Ctx) error { gs.ButtonCount++ return c.Status(200).JSON(fiber.Map{"pressCount": gs.ButtonCount}) }