/
gnomdeployer
/
VUZPlus
Обзор
Документация
Войти
/
gnomdeployer
/
VUZPlus
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
server/internal/api/handler/root.go
125 строк
5 KB
maximmalchevsky
ura
20 май 2025, 02:58
20 май 2025, 02:58
e733017
Код
Авторство
О чём код?
package handler import ( "github.com/gofiber/fiber/v2" "strings" "vuzplus/internal/shared/entities" "vuzplus/internal/shared/log" "vuzplus/util" ) // CreateAdmin // @Tags Root // @Summary Создание администратора вуза // @Description Создает администратора с временным паролем // @Accept json // @Produce json // @Param request body entities.CreateAdminRequest true "Данные администратора" // @Success 200 {object} entities.CreateAdminResponse "Администратор успешно создан" // @Failure 400 {object} entities.Error "Некорректный запрос" // @Failure 403 {object} entities.Error "Недостаточно прав" // @Failure 500 {object} entities.Error "Ошибка на стороне сервера" // @Router /auth/admin [post] // @Security ApiKeyAuth func (h *Handler) CreateAdmin(c *fiber.Ctx) error { adminId, ok := c.Locals("id").(int) if !ok { logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Error", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusBadRequest}) logEvent.Msg("error: cant get id from token") return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "cant get id from token"}) } h.logger.Debug().Msg("call h.repository.DB.DBGetRoleById") userStatus, err := h.repository.DB.DBGetRoleById(adminId) if err != nil { logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Error", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusBadRequest}) logEvent.Msg(err.Error()) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": err.Error()}) } if userStatus.Role == "root" && userStatus.Status == "verified" { var u entities.CreateAdminRequest if err := c.BodyParser(&u); err != nil { logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Error", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusBadRequest}) logEvent.Msg(err.Error()) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": err.Error()}) } h.logger.Debug().Msg("call h.repository.DB.DBUserExists") exists, err := h.repository.DB.DBUserExists(u.Email) if err != nil { logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Error", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusInternalServerError}) logEvent.Msg(err.Error()) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } if exists { logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Error", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusBadRequest}) logEvent.Msg("user already exists") return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "user already exists"}) } var user entities.User user.Email = u.Email user.PhoneNumber = u.PhoneNumber user.Role = "admin" user.VerificationStatus = "verified" generatedPassword := util.GenerateTemporaryPassword(15) hashedPassword, err := util.HashPassword(generatedPassword) if err != nil { logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Error", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusInternalServerError}) logEvent.Msg(err.Error()) return c.Status(500).JSON(fiber.Map{"error": err.Error()}) } user.PasswordHash = hashedPassword fullName := strings.Split(u.FIO, " ") if len(fullName) < 2 || len(fullName) > 3 { logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Error", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusBadRequest}) logEvent.Msg("invalid full name") return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "invalid full name"}) } user.LastName = fullName[0] user.FirstName = fullName[1] if len(fullName) == 3 { user.MiddleName = fullName[2] } if u.UniversityID != 0 { user.UniversityID = u.UniversityID } h.logger.Debug().Msg("call h.repository.DB.DBCreateAdmin") r, err := h.repository.DB.DBCreateAdmin(&user) if err != nil { logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Error", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusInternalServerError}) logEvent.Msg(err.Error()) return c.Status(500).JSON(fiber.Map{"error": err.Error()}) } res := &entities.CreateAdminResponse{ ID: r.ID, Email: r.Email, Password: generatedPassword, } logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Info", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusOK}) logEvent.Msg("success") return c.Status(fiber.StatusOK).JSON(res) } else { logEvent := log.CreateLog(h.logger, log.LogsField{Level: "Error", Method: c.Method(), Url: c.OriginalURL(), Status: fiber.StatusInternalServerError}) logEvent.Msg("error: There are not enough rights for this action") return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": "There are not enough rights for this action"}) } }