package handlers import ( "fmt" "github.com/gofiber/fiber/v2" "github.com/google/uuid" "log" "relay-server/database" "relay-server/utils" ) func CreateGroup(c *fiber.Ctx) error { type createGroupRequest struct { GroupName string `json:"groupName"` } userID := c.Locals("userID").(uuid.UUID) var req createGroupRequest if err := c.BodyParser(&req); err != nil { return utils.NewError(utils.ErrInvalidInput, "Invalid request body", err) } if req.GroupName == "" { return utils.NewError(utils.ErrInvalidInput, "Group name is empty", nil) } groupID, err := database.CreateGroup(database.DB, req.GroupName, userID) if err != nil { return err } //TODO zrobic io.to(groupID).emit("added to group", {groupID, username: req.GroupName}) return c.Status(fiber.StatusOK).JSON(fiber.Map{"groupID": groupID}) } func AddMemberToGroup(c *fiber.Ctx) error { type addMemberToGroupRequest struct { GroupID uuid.UUID `json:"group_id"` UserID uuid.UUID `json:"user_id"` } var req addMemberToGroupRequest if err := c.BodyParser(&req); err != nil { return utils.NewError(utils.ErrInvalidInput, "Invalid request body", err) } if req.GroupID == uuid.Nil { return utils.NewError(utils.ErrInvalidInput, "Group ID is empty", nil) } if req.UserID == uuid.Nil { return utils.NewError(utils.ErrInvalidInput, "User ID is empty", nil) } isAdmin, err := database.IsAdmin(database.DB, req.UserID, req.GroupID) if err != nil { return err } if !isAdmin { return utils.NewError(utils.ErrUnauthorized, "You are not a group administrator", nil) } _, err = database.AddMemberToGroup(database.DB, req.GroupID, req.UserID) if err != nil { return err } //TODO zrobic io.to(req.GroupID).emit("added to group", {groupID: req.GroupID, userID: req.UserID}), i wyslij do tego latest message bo na razie mi sie nie chce log.Println("Successfully added member to group") return c.Status(fiber.StatusOK).JSON(fiber.Map{"message": "Successfully added member to group"}) } func GetMembers(c *fiber.Ctx) error { type params struct { GroupID uuid.UUID `params:"groupID"` } var p params if err := c.ParamsParser(&p); err != nil { return utils.NewError(utils.ErrInvalidInput, "Invalid params", err) } isMember, err := database.IsMember(database.DB, c.Locals("userID").(uuid.UUID), p.GroupID) if err != nil { return utils.NewError(utils.ErrInternal, "Failed to get members", fmt.Errorf("failed to check if user is a member: %w", err)) } if !isMember { return utils.NewError(utils.ErrForbidden, "You are not a member of this group", nil) } members, err := database.GetMembers(database.DB, p.GroupID) if err != nil { return err } return c.Status(fiber.StatusOK).JSON(members) }