Files
test_deploy/internal/http/company_agent.go
Alex Shevchuk 61fc0d2747
Some checks failed
Deploy Production / Deploy to Staging (push) Has been skipped
Go Linter / Run golangci-lint (api_gateway) (push) Failing after 2m31s
Go Linter / Build golang services (api_gateway) (push) Has been skipped
Go Linter / Tag Commit (push) Has been skipped
Go Linter / Push Docker Images (api_gateway) (push) Has been skipped
71
2025-09-17 14:32:06 +03:00

208 lines
6.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package http_router
import (
"context"
"encoding/json"
"log/slog"
"net/http"
"git-molva.ru/Molva/molva-backend/services/api_gateway/internal/constants"
"github.com/gorilla/mux"
rmodel "git-molva.ru/Molva/molva-backend/services/api_gateway/internal/request_model"
)
// @Summary Получить список компаний агента
// @Description Получение списка всех компаний, принадлежащих агенту
// @Tags agents
// @Accept json
// @Produce json
// @Param agent_id path string true "ID агента"
// @Success 200 {object} rmodel.CompanyListGetResponse "Список компаний"
// @Failure 400 {object} map[string]string "Неверные данные запроса"
// @Failure 401 {object} map[string]string "Неавторизованный доступ"
// @Failure 500 {object} map[string]string "Внутренняя ошибка сервера"
// @Security BearerAuth
// @Router /api/v1/agents/{agent_id}/companies [get]
func (h *handler) getCompanyListAgentHandler(w http.ResponseWriter, r *http.Request) {
const handlerName = "getCompanyListAgentHandler"
var (
vars = mux.Vars(r)
agentId = vars["agent_id"]
)
result, err := h.agentService.GetCompanyList(r.Context(), &rmodel.CompanyListGetRequest{
Id: agentId,
})
if err != nil {
h.handleAgentError(w, err)
h.logger.Error("error getting company list",
slog.String("error", err.Error()),
slog.String("handler", handlerName),
)
return
}
w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(result); err != nil {
http.Error(w, constants.ErrInternalServerError.Error(), http.StatusInternalServerError)
h.logger.Error("error encoding response",
slog.String("error", err.Error()),
slog.String("handler", handlerName),
)
}
}
// @Summary Получить компанию по ID
// @Description Получение детальной информации о компании агента
// @Tags agents
// @Accept json
// @Produce json
// @Param agent_id path string true "ID агента"
// @Param company_id path string true "ID компании"
// @Success 200 {object} rmodel.CompanyByIdGetResponse "Информация о компании"
// @Failure 400 {object} map[string]string "Неверные данные запроса"
// @Failure 401 {object} map[string]string "Неавторизованный доступ"
// @Failure 404 {object} map[string]string "Компания не найдена"
// @Failure 500 {object} map[string]string "Внутренняя ошибка сервера"
// @Security BearerAuth
// @Router /api/v1/agents/{agent_id}/company/{company_id} [get]
func (h *handler) getCompanyByIdAgentHandler(w http.ResponseWriter, r *http.Request) {
const handlerName = "getCompanyByIdAgentHandler"
var (
vars = mux.Vars(r)
agentId = vars["agent_id"]
companyId = vars["company_id"]
)
result, err := h.agentService.GetCompanyInfo(r.Context(), &rmodel.CompanyByIdGetRequest{
UserId: agentId,
CompanyId: companyId,
})
if err != nil {
h.handleAgentError(w, err)
h.logger.Error("error getting company info",
slog.String("error", err.Error()),
slog.String("handler", handlerName),
)
return
}
w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(result); err != nil {
http.Error(w, constants.ErrInternalServerError.Error(), http.StatusInternalServerError)
h.logger.Error("error encoding response",
slog.String("error", err.Error()),
slog.String("handler", handlerName),
)
}
}
// @Summary Создать компанию
// @Description Создание новой компании для агента
// @Tags agents
// @Accept json
// @Produce json
// @Param agent_id path string true "ID агента"
// @Param request body rmodel.CompanyCreateRequest true "Данные для создания компании"
// @Success 201 {object} rmodel.CompanyCreateResponse "Компания создана"
// @Failure 400 {object} map[string]string "Неверные данные запроса"
// @Failure 401 {object} map[string]string "Неавторизованный доступ"
// @Failure 500 {object} map[string]string "Внутренняя ошибка сервера"
// @Security BearerAuth
// @Router /api/v1/agents/{agent_id}/company [post]
// FIXME: foreign key violation review
func (h *handler) createCompanyAgentHandler(w http.ResponseWriter, r *http.Request) {
const handlerName = "createAgentCompanyHandler"
var (
vars = mux.Vars(r)
agentId = vars["agent_id"]
)
var request rmodel.CompanyCreateRequest
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
http.Error(w, constants.ErrBadRequest.Error(), http.StatusBadRequest)
h.logger.Error("error while unmarshalling request: ",
slog.String("error", err.Error()),
slog.String("handler", handlerName))
return
}
request.OwnerId = agentId
result, err := h.agentService.CreateCompany(r.Context(), &request)
if err != nil {
h.handleAgentError(w, err)
h.logger.Error("error creating company",
slog.String("error", err.Error()),
slog.String("handler", handlerName),
)
return
}
w.WriteHeader(http.StatusCreated)
w.Header().Set("Content-Type", "application/json")
// go h.createCreateCompanyFeedEvent(r.Context(), agentId, true, resp, handlerName)
if err := json.NewEncoder(w).Encode(result); err != nil {
http.Error(w, constants.ErrInternalServerError.Error(), http.StatusInternalServerError)
h.logger.Error("error encoding response",
slog.String("error", err.Error()),
slog.String("handler", handlerName),
)
}
}
func (h *handler) updateCompanyAgentHandler(w http.ResponseWriter, r *http.Request) {
const handlerName = "updateCompanyAgentHandler"
var (
vars = mux.Vars(r)
agentId = vars["agent_id"]
companyId = vars["company_id"]
)
var request rmodel.CompanyUpdateRequest
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
http.Error(w, constants.ErrBadRequest.Error(), http.StatusBadRequest)
h.logger.Error("error while unmarshalling request: ",
slog.String("error", err.Error()),
slog.String("handler", handlerName),
)
return
}
request.Id = companyId
if _, err := h.agentService.UpdateCompanyInfo(r.Context(), &request); err != nil {
h.handleAgentError(w, err)
h.logger.Error("error updating company info",
slog.String("error", err.Error()),
slog.String("handler", handlerName),
)
return
}
go h.createEditCompanyFeedEvent(
context.Background(),
agentId,
true,
companyId,
handlerName,
)
w.WriteHeader(http.StatusNoContent)
}