1
This commit is contained in:
474
internal/http/feed.go
Normal file
474
internal/http/feed.go
Normal file
@@ -0,0 +1,474 @@
|
||||
package http_router
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"git-molva.ru/Molva/molva-backend/services/api_gateway/internal/feed"
|
||||
"git-molva.ru/Molva/molva-backend/services/api_gateway/internal/types"
|
||||
pbfAgent "github.com/AlexOreL-272/ProtoMolva/go/gen/agent"
|
||||
pbfDistr "github.com/AlexOreL-272/ProtoMolva/go/gen/distributor"
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
//nolint:unused // TODO: review feed handlers
|
||||
func (h *handler) createCreateCompanyFeedEvent(ctx context.Context, uid string, isAgent bool, resp []byte, handlerName string) {
|
||||
var (
|
||||
jsonResp interface{}
|
||||
companyID string
|
||||
companyName string
|
||||
)
|
||||
|
||||
if isAgent {
|
||||
jsonResp = new(pbfAgent.SetCompanyDataResponse)
|
||||
} else {
|
||||
jsonResp = new(pbfDistr.SetCompanyDataResponse)
|
||||
}
|
||||
|
||||
ownerType := feed.RoleDistributor
|
||||
if isAgent {
|
||||
ownerType = feed.RoleAgent
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(resp, jsonResp); err != nil {
|
||||
h.logger.Error(fmt.Sprintf("failed to unmarshal %s SetCompanyDataResponse", ownerType),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
switch resp := jsonResp.(type) {
|
||||
case *pbfAgent.SetCompanyDataResponse:
|
||||
company := resp.GetCompany()
|
||||
companyID = company.GetCompanyId()
|
||||
companyName = company.GetName()
|
||||
|
||||
case *pbfDistr.SetCompanyDataResponse:
|
||||
company := resp.GetCompany()
|
||||
companyID = company.GetCompanyId()
|
||||
companyName = company.GetName()
|
||||
|
||||
default:
|
||||
h.logger.Error("unexpected response type",
|
||||
slog.String("handler", handlerName))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
event := feed.Event{
|
||||
OwnerId: uid,
|
||||
OwnerType: ownerType,
|
||||
EventType: feed.EventCompanyCreated,
|
||||
Message: fmt.Sprintf("Компания %s создана", companyName),
|
||||
Visibility: feed.VisibilityCompanyWide,
|
||||
CompanyID: &companyID,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: companyID,
|
||||
AttachmentType: feed.AttachmentTypeCompany,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("uid", uid),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("company_id", companyID),
|
||||
slog.String("company_id", companyID),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
//nolint:unused // TODO: review feed handlers
|
||||
func (h *handler) createAddNewStaffMemberFeedEvent(ctx context.Context, uid string, isAgent bool, newStaffMember, companyId, handlerName string) {
|
||||
ownerType := feed.RoleDistributor
|
||||
|
||||
if isAgent {
|
||||
ownerType = feed.RoleAgent
|
||||
}
|
||||
|
||||
event := feed.Event{
|
||||
OwnerId: uid,
|
||||
OwnerType: ownerType,
|
||||
EventType: feed.EventNewCompanyMember,
|
||||
Message: "Новый сотрудник добавлен в компанию",
|
||||
Visibility: feed.VisibilityCompanyWide,
|
||||
CompanyID: &companyId,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: newStaffMember,
|
||||
AttachmentType: feed.AttachmentTypeProfile,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("uid", uid),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("company_id", companyId),
|
||||
slog.String("new_staff_member", newStaffMember),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
//nolint:unused // TODO: review feed handlers
|
||||
func (h *handler) createSetSubmissionStatusFeedEvent(ctx context.Context, distributorId, submissionId string, submissionStatus types.Status, handlerName string) {
|
||||
var message string
|
||||
|
||||
switch submissionStatus {
|
||||
case types.StatusAccepted:
|
||||
message = "Отклик на вакансию принят"
|
||||
case types.StatusDeclined:
|
||||
message = "Отклик на вакансию отклонен"
|
||||
case types.StatusSuspended:
|
||||
message = "Отклик на вакансию отложен"
|
||||
default:
|
||||
message = "Статус отклика на вакансию был изменен"
|
||||
}
|
||||
|
||||
companyIds, err := h.feed.GetCompanyIdByUidTmp(ctx, distributorId)
|
||||
if err != nil {
|
||||
h.logger.Error("failed to get company Id",
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("distributor_id", distributorId))
|
||||
}
|
||||
|
||||
agentId, err := h.feed.GetAgentIdBySubmissionId(ctx, submissionId)
|
||||
if err != nil {
|
||||
//я хз стоит ли отдельно как-то обрабатывать ErrorNotFound(вроде как нет)
|
||||
h.logger.Error("failed to get agent Id",
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("submission_id", submissionId))
|
||||
}
|
||||
|
||||
for _, companyId := range companyIds {
|
||||
event := feed.Event{
|
||||
OwnerId: distributorId,
|
||||
OwnerType: feed.RoleDistributor,
|
||||
EventType: feed.EventSubmissionStatusChanged,
|
||||
Message: message,
|
||||
Visibility: feed.VisibilityCompanyWide,
|
||||
CompanyID: &companyId,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: submissionId,
|
||||
AttachmentType: feed.AttachmentTypeCV,
|
||||
AdditionalReceiver: agentId,
|
||||
CustomData: submissionStatus.String(),
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("distributor_id", distributorId),
|
||||
slog.String("agent_id", agentId),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("submission_id", submissionId),
|
||||
slog.String("company_id", companyId),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//nolint:unused // TODO: review feed handlers
|
||||
func (h *handler) createTransactionFeedEvent(ctx context.Context, uid string, isAgent bool, amount int64, currency, bankAccountId, handlerName string) {
|
||||
var message string
|
||||
|
||||
if amount > 0 {
|
||||
message = fmt.Sprintf("Вы получили %.2f %s", float64(amount)/100, currency)
|
||||
} else {
|
||||
message = fmt.Sprintf("С вашего аккаунта выведено %.2f %s", float64(-amount)/100, currency)
|
||||
}
|
||||
|
||||
ownerType := feed.RoleDistributor
|
||||
|
||||
if isAgent {
|
||||
ownerType = feed.RoleAgent
|
||||
}
|
||||
|
||||
event := feed.Event{
|
||||
OwnerId: uid,
|
||||
OwnerType: ownerType,
|
||||
EventType: feed.EventTransactionCreated,
|
||||
Message: message,
|
||||
Visibility: feed.VisibilityPrivate,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: bankAccountId,
|
||||
AttachmentType: feed.AttachmentTypeBankAccount,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("uid", uid),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("bank_account_id", bankAccountId))
|
||||
}
|
||||
}
|
||||
|
||||
//nolint:unused // TODO: review feed handlers
|
||||
func (h *handler) createCreateBankAccountFeedEvent(ctx context.Context, uid string, isAgent bool, resp []byte, bankName, handlerName string) {
|
||||
var msg proto.Message
|
||||
|
||||
var ownerType feed.UserRole
|
||||
|
||||
if isAgent {
|
||||
msg = &pbfAgent.CreateBankAccountResponse{}
|
||||
ownerType = feed.RoleAgent
|
||||
} else {
|
||||
msg = &pbfDistr.CreateBankAccountResponse{}
|
||||
ownerType = feed.RoleDistributor
|
||||
}
|
||||
|
||||
if err := protojson.Unmarshal(resp, msg); err != nil {
|
||||
h.logger.Error(fmt.Sprintf("failed to unmarshal %s CreateBankAccountResponse", ownerType),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
var bankAccountId string
|
||||
switch v := msg.(type) {
|
||||
case *pbfAgent.CreateBankAccountResponse:
|
||||
bankAccountId = v.GetBankAccountId()
|
||||
case *pbfDistr.CreateBankAccountResponse:
|
||||
bankAccountId = v.GetBankAccountId()
|
||||
default:
|
||||
h.logger.Error("unexpected response type",
|
||||
slog.String("handler", handlerName),
|
||||
)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
event := feed.Event{
|
||||
OwnerId: uid,
|
||||
OwnerType: ownerType,
|
||||
EventType: feed.EventBankAccountCreated,
|
||||
Message: fmt.Sprintf("Банковский счёт %s создан", bankName),
|
||||
Visibility: feed.VisibilityPrivate,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: bankAccountId,
|
||||
AttachmentType: feed.AttachmentTypeBankAccount,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("uid", uid),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("bank_account_id", bankAccountId),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *handler) createEditBankAccountFeedEvent(ctx context.Context, uid string, isAgent bool, bankAccountID, handlerName string) {
|
||||
ownerType := feed.RoleDistributor
|
||||
|
||||
if isAgent {
|
||||
ownerType = feed.RoleAgent
|
||||
}
|
||||
|
||||
event := feed.Event{
|
||||
OwnerId: uid,
|
||||
OwnerType: ownerType,
|
||||
EventType: feed.EventBankAccountChanged,
|
||||
Message: "Банковский счёт обновлён",
|
||||
Visibility: feed.VisibilityPrivate,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: bankAccountID,
|
||||
AttachmentType: feed.AttachmentTypeBankAccount,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("uid", uid),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("bank_account_id", bankAccountID))
|
||||
}
|
||||
}
|
||||
|
||||
func (h *handler) createEditCompanyFeedEvent(ctx context.Context, uid string, isAgent bool, companyID, handlerName string) {
|
||||
ownerType := feed.RoleDistributor
|
||||
|
||||
if isAgent {
|
||||
ownerType = feed.RoleAgent
|
||||
}
|
||||
|
||||
event := feed.Event{
|
||||
OwnerId: uid,
|
||||
OwnerType: ownerType,
|
||||
EventType: feed.EventCompanyChanged,
|
||||
Message: "Данные компании обновлены",
|
||||
Visibility: feed.VisibilityCompanyWide,
|
||||
CompanyID: &companyID,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: companyID,
|
||||
AttachmentType: feed.AttachmentTypeCompany,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("uid", uid),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("company_id", companyID))
|
||||
}
|
||||
}
|
||||
|
||||
func (h *handler) createSetProfileEvent(ctx context.Context, uid string, isAgent bool, handlerName string) {
|
||||
ownerType := feed.RoleDistributor
|
||||
|
||||
if isAgent {
|
||||
ownerType = feed.RoleAgent
|
||||
}
|
||||
|
||||
event := feed.Event{
|
||||
OwnerId: uid,
|
||||
OwnerType: ownerType,
|
||||
EventType: feed.EventProfileChanged,
|
||||
Message: "Ваши данные профиля обновлены",
|
||||
Visibility: feed.VisibilityPrivate,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: uid,
|
||||
AttachmentType: feed.AttachmentTypeProfile,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("uid", uid),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *handler) createSetDistributorVacancyEvent(ctx context.Context, distributorId, vacancyId, vacancyName, handlerName string) {
|
||||
event := feed.Event{
|
||||
OwnerId: distributorId,
|
||||
OwnerType: feed.RoleDistributor,
|
||||
EventType: feed.EventVacancyCreated,
|
||||
Message: fmt.Sprintf("Вакансия %s была создана", vacancyName),
|
||||
Visibility: feed.VisibilityPublic,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: vacancyId,
|
||||
AttachmentType: feed.AttachmentTypeVacancy,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("distributor_id", distributorId),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("vacancy_id", vacancyId),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *handler) createEditDistributorVacancyEvent(ctx context.Context, distributorId, vacancyId, handlerName string) {
|
||||
event := feed.Event{
|
||||
OwnerId: distributorId,
|
||||
OwnerType: feed.RoleDistributor,
|
||||
EventType: feed.EventVacancyChanged,
|
||||
Message: "Вакансия была изменена",
|
||||
Visibility: feed.VisibilityPublic,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: vacancyId,
|
||||
AttachmentType: feed.AttachmentTypeVacancy,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("distributor_id", distributorId),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("vacancy_id", vacancyId))
|
||||
}
|
||||
}
|
||||
|
||||
func (h *handler) createSendVacancyToModerationEvent(ctx context.Context, distributorId, vacancyId, handlerName string) {
|
||||
companyIds, err := h.feed.GetCompanyIdByUidTmp(ctx, distributorId)
|
||||
if err != nil {
|
||||
h.logger.Error("failed to get company Id",
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("distributor_id", distributorId))
|
||||
}
|
||||
|
||||
for _, companyId := range companyIds {
|
||||
event := feed.Event{
|
||||
OwnerId: distributorId,
|
||||
OwnerType: feed.RoleDistributor,
|
||||
EventType: feed.EventVacancyModerationSent,
|
||||
Message: "Вакансия была отправлена на модерацию",
|
||||
Visibility: feed.VisibilityCompanyWide,
|
||||
CompanyID: &companyId,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: vacancyId,
|
||||
AttachmentType: feed.AttachmentTypeVacancy,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("distributor_id", distributorId),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("vacancy_id", vacancyId),
|
||||
slog.String("company_id", companyId),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (h *handler) createPostAnketaEvent(ctx context.Context, agentID, submissionId, handlerName string) {
|
||||
companyIds, err := h.feed.GetCompanyIdByUidTmp(ctx, agentID)
|
||||
if err != nil {
|
||||
h.logger.Error("failed to get company Id",
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("agent_id", agentID))
|
||||
}
|
||||
|
||||
for _, companyId := range companyIds {
|
||||
event := feed.Event{
|
||||
OwnerId: agentID,
|
||||
OwnerType: feed.RoleAgent,
|
||||
EventType: feed.EventPostAnketa,
|
||||
Message: "Анкета была заполнена",
|
||||
Visibility: feed.VisibilityPrivate,
|
||||
CompanyID: &companyId,
|
||||
Payload: feed.EventPayload{
|
||||
AttachmentId: submissionId,
|
||||
AttachmentType: feed.AttachmentTypeSubmission,
|
||||
},
|
||||
}
|
||||
|
||||
if err := h.feed.CreateEvent(ctx, &event); err != nil {
|
||||
h.logger.Error("failed to create feed event",
|
||||
slog.String("agent_id", agentID),
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName),
|
||||
slog.String("submission_id", submissionId),
|
||||
slog.String("company_id", companyId),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user