feat: create history

This commit is contained in:
Kirill 2023-05-23 18:24:52 +03:00
parent 7aa91c9f67
commit 82af0a7945
6 changed files with 163 additions and 86 deletions

@ -2,6 +2,7 @@ package history
import (
"context"
"fmt"
"log"
"net/http"
@ -48,7 +49,21 @@ func New(deps *Deps) *Controller {
}
func (receiver *Controller) CreateHistory(ctx echo.Context) error {
createdHistory, err := receiver.historyService.CreateHistory(ctx.Request().Context(), &models.History{})
request, bindErr := echotools.Bind[swagger.Add2historyJSONRequestBody](ctx)
if bindErr != nil {
receiver.logger.Error("failed to bind body on <CreateHistory> of <HistoryController>", zap.Error(bindErr))
return echotools.ResponseError(ctx, errors.New(
fmt.Errorf("failed to parse body on <CreateHistory> of <HistoryController>: %w", bindErr),
errors.ErrInvalidArgs,
))
}
createdHistory, err := receiver.historyService.CreateHistory(ctx.Request().Context(), &models.History{
UserID: *request.UserId,
Type: models.HistoryType(*request.Type),
Comment: *request.Comment,
RawDetails: *request.RawDetails,
})
if err != nil {
receiver.logger.Error("failed to create history on <CreateHistory> of <HistoryController>", zap.Error(err))
return echotools.ResponseError(ctx, err)

@ -3,17 +3,28 @@ package models
import "time"
type History struct {
ID string `json:"id" bson:"_id,omitempty"`
UserID string `json:"userId" bson:"userId"`
Comment string `json:"comment" bson:"comment"`
Subject string `json:"subject" bson:"subject"`
Type HistoryType `json:"type" bson:"type"`
Deleted bool `json:"deleted" bson:"deleted"`
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
DeletedAt *time.Time `json:"deletedAt,omitempty" bson:"deletedAt,omitempty"`
ID string `json:"id" bson:"_id,omitempty"`
UserID string `json:"userId" bson:"userId"`
Comment string `json:"comment" bson:"comment"`
Type HistoryType `json:"type" bson:"type"`
RawDetails string `json:"rawDetails" bson:"rawDetails"`
BuyCartDetails *BuyCartDetails `json:"buyCartDetails,omitempty" bson:"buyCartDetails,omitempty"`
DeclinedPaymentDetails *DeclinedPaymentDetails `json:"declinedPaymentDetails,omitempty" bson:"declinedPaymentDetails,omitempty"`
SubsriptionEndDetails *SubsriptionEndDetails `json:"subsriptionEndDetails,omitempty" bson:"subsriptionEndDetails,omitempty"`
SuccessfulPaymentDetails *SuccessfulPaymentDetails `json:"successfulPaymentDetails,omitempty" bson:"successfulPaymentDetails,omitempty"`
TimeoutPaymentDetails *TimeoutPaymentDetails `json:"timeoutPaymentDetails,omitempty" bson:"timeoutPaymentDetails,omitempty"`
Deleted bool `json:"deleted" bson:"deleted"`
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
DeletedAt *time.Time `json:"deletedAt,omitempty" bson:"deletedAt,omitempty"`
}
type BuyCartDetails struct{}
type DeclinedPaymentDetails struct{}
type SubsriptionEndDetails struct{}
type SuccessfulPaymentDetails struct{}
type TimeoutPaymentDetails struct{}
type HistoryType string
const (

@ -9,10 +9,12 @@ import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/fields"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
mongoWrapper "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/mongo"
)
type HistoryRepositoryDeps struct {
@ -68,6 +70,36 @@ func (receiver *HistoryRepository) Insert(ctx context.Context, history *models.H
return history, nil
}
func (receiver *HistoryRepository) FindMany(ctx context.Context, page, limit int64) ([]models.History, errors.Error) {
filter := bson.M{fields.Account.Deleted: false}
findOptions := options.Find()
skip := (page - 1) * limit
findOptions.SetSkip(skip)
findOptions.SetLimit(limit)
histories, err := mongoWrapper.Find[models.History](ctx, &mongoWrapper.RequestSettings{
Driver: receiver.mongoDB,
Options: findOptions,
Filter: filter,
})
if err != nil {
receiver.logger.Error("failed to find many histories on <FindMany> of <HistoryRepository>",
zap.Int64("page", page),
zap.Int64("limit", limit),
zap.Int64("skip", skip),
zap.Error(err),
)
return nil, errors.New(
fmt.Errorf("failed to find many histories on <FindMany> of <HistoryRepository>: %w", err),
errors.ErrInternalError,
)
}
return histories, nil
}
func (receiver *HistoryRepository) CountAll(ctx context.Context) (int64, errors.Error) {
count, err := receiver.mongoDB.CountDocuments(ctx, bson.M{fields.History.Deleted: false})
if err != nil {

@ -271,8 +271,6 @@ func (w *ServerInterfaceWrapper) GetHistory(ctx echo.Context) error {
func (w *ServerInterfaceWrapper) Add2history(ctx echo.Context) error {
var err error
ctx.Set(BearerScopes, []string{""})
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.Add2history(ctx)
return err
@ -370,66 +368,66 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
"WkosduIbwox4dWH13wEAAP//CUifXPxCAAA=",
"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",
}
// GetSwagger returns the content of the embedded swagger specification file

@ -46,14 +46,14 @@ type History struct {
DeletedAt *time.Time `json:"deletedAt,omitempty"`
Id string `json:"id"`
// Subject Я пока не могу предположить, какие будут фильтры по истории, поэтому предлагаю в это поле просто класть строку с json. Ибо для каждого типа записи она своя.
Subject string `json:"subject"`
Type HistoryType `json:"type"`
UpdatedAt time.Time `json:"updatedAt"`
UserId string `json:"userId"`
// RawDetails Я пока не могу предположить, какие будут фильтры по истории, поэтому предлагаю в это поле просто класть строку с json. Ибо для каждого типа записи она своя.
RawDetails *string `json:"rawDetails,omitempty"`
Type HistoryType `json:"type"`
UpdatedAt time.Time `json:"updatedAt"`
UserId string `json:"userId"`
}
// HistoryType defines model for History.Type.
// HistoryType defines model for HistoryType.
type HistoryType string
// Wallet defines model for Wallet.
@ -105,6 +105,14 @@ type GetHistoryParams struct {
Limit *int `form:"limit,omitempty" json:"limit,omitempty"`
}
// Add2historyJSONBody defines parameters for Add2history.
type Add2historyJSONBody struct {
Comment *string `json:"comment,omitempty"`
RawDetails *string `json:"rawDetails,omitempty"`
Type *HistoryType `json:"type,omitempty"`
UserId *string `json:"userId,omitempty"`
}
// RequestMoneyParams defines parameters for RequestMoney.
type RequestMoneyParams struct {
// Cash Количество денег
@ -130,7 +138,7 @@ type PayCartJSONRequestBody PayCartJSONBody
type UpdateCurrenciesJSONRequestBody = UpdateCurrenciesJSONBody
// Add2historyJSONRequestBody defines body for Add2history for application/json ContentType.
type Add2historyJSONRequestBody = History
type Add2historyJSONRequestBody Add2historyJSONBody
// ChangeCurrencyJSONRequestBody defines body for ChangeCurrency for application/json ContentType.
type ChangeCurrencyJSONRequestBody ChangeCurrencyJSONBody

@ -555,13 +555,24 @@ paths:
- history
summary: Публикация лога в истории
operationId: add2history
security:
- Bearer: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/History"
type: object
required: [currency]
properties:
userId:
type: string
example: "807f1f77bcf81cd799439011"
type:
$ref: '#/components/schemas/HistoryType'
comment:
type: string
example: "я это сделал потому что 42"
rawDetails:
type: string
example: '{"tariffs":["807f1f77bcf81cd799439011","807f1f77bcf81cd799439011"]}'
responses:
'200':
description: Успешная публикация лога
@ -645,9 +656,7 @@ components:
type: string
example: "807f1f77bcf81cd799439011"
type:
type: string
enum: ["successfulPayment", "declinedPayment", "timeoutPayment", "buyCart", "subsriptionEnd"]
example: "successfulPayment"
$ref: '#/components/schemas/HistoryType'
deleted:
type: boolean
example: false
@ -663,7 +672,7 @@ components:
comment:
type: string
example: "я это сделал потому что 42"
subject:
rawDetails:
type: string
description: >-
Я пока не могу предположить, какие будут фильтры по
@ -672,6 +681,10 @@ components:
Ибо для каждого типа записи она своя.
example: '{"tariffs":["807f1f77bcf81cd799439011","807f1f77bcf81cd799439011"]}'
HistoryType:
type: string
enum: ["successfulPayment", "declinedPayment", "timeoutPayment", "buyCart", "subsriptionEnd"]
Error:
type: object
required: [code, message]