generated from PenaSide/GolangTemplate
feat: history
This commit is contained in:
parent
c2274e383b
commit
7aa91c9f67
71
internal/controller/history/history.go
Normal file
71
internal/controller/history/history.go
Normal file
@ -0,0 +1,71 @@
|
||||
package history
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors"
|
||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
|
||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/swagger"
|
||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils/echotools"
|
||||
)
|
||||
|
||||
type historyService interface {
|
||||
CreateHistory(context.Context, *models.History) (*models.History, errors.Error)
|
||||
GetHistoryList(context.Context, *models.Pagination) (*models.PaginationResponse[models.History], errors.Error)
|
||||
}
|
||||
|
||||
type Deps struct {
|
||||
Logger *zap.Logger
|
||||
HistoryService historyService
|
||||
}
|
||||
|
||||
type Controller struct {
|
||||
logger *zap.Logger
|
||||
historyService historyService
|
||||
}
|
||||
|
||||
func New(deps *Deps) *Controller {
|
||||
if deps == nil {
|
||||
log.Panicln("deps is nil on <New (history controller)>")
|
||||
}
|
||||
|
||||
if deps.Logger == nil {
|
||||
log.Panicln("logger is nil on <New (history controller)>")
|
||||
}
|
||||
|
||||
if deps.HistoryService == nil {
|
||||
log.Panicln("HistoryService is nil on <New (history controller)>")
|
||||
}
|
||||
|
||||
return &Controller{
|
||||
logger: deps.Logger,
|
||||
historyService: deps.HistoryService,
|
||||
}
|
||||
}
|
||||
|
||||
func (receiver *Controller) CreateHistory(ctx echo.Context) error {
|
||||
createdHistory, err := receiver.historyService.CreateHistory(ctx.Request().Context(), &models.History{})
|
||||
if err != nil {
|
||||
receiver.logger.Error("failed to create history on <CreateHistory> of <HistoryController>", zap.Error(err))
|
||||
return echotools.ResponseError(ctx, err)
|
||||
}
|
||||
|
||||
return ctx.JSON(http.StatusOK, createdHistory)
|
||||
}
|
||||
|
||||
func (receiver *Controller) GetHistoryList(ctx echo.Context, params swagger.GetHistoryParams) error {
|
||||
histories, err := receiver.historyService.GetHistoryList(ctx.Request().Context(), &models.Pagination{
|
||||
Page: int64(*params.Page),
|
||||
Limit: int64(*params.Limit),
|
||||
})
|
||||
if err != nil {
|
||||
receiver.logger.Error("failed to get histories on <GetHistoryList> of <HistoryController>", zap.Error(err))
|
||||
return echotools.ResponseError(ctx, err)
|
||||
}
|
||||
|
||||
return ctx.JSON(http.StatusOK, histories)
|
||||
}
|
23
internal/fields/history.go
Normal file
23
internal/fields/history.go
Normal file
@ -0,0 +1,23 @@
|
||||
package fields
|
||||
|
||||
var History = struct {
|
||||
ID string
|
||||
UserID string
|
||||
Comment string
|
||||
Subject string
|
||||
Type string
|
||||
Deleted string
|
||||
CreatedAt string
|
||||
UpdatedAt string
|
||||
DeletedAt string
|
||||
}{
|
||||
ID: "_id",
|
||||
UserID: "userId",
|
||||
Comment: "comment",
|
||||
Subject: "subject",
|
||||
Type: "type",
|
||||
Deleted: "deleted",
|
||||
CreatedAt: "createdAt",
|
||||
UpdatedAt: "updatedAt",
|
||||
DeletedAt: "deletedAt",
|
||||
}
|
25
internal/models/history.go
Normal file
25
internal/models/history.go
Normal file
@ -0,0 +1,25 @@
|
||||
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"`
|
||||
}
|
||||
|
||||
type HistoryType string
|
||||
|
||||
const (
|
||||
BuyCart HistoryType = "buyCart"
|
||||
DeclinedPayment HistoryType = "declinedPayment"
|
||||
SubsriptionEnd HistoryType = "subsriptionEnd"
|
||||
SuccessfulPayment HistoryType = "successfulPayment"
|
||||
TimeoutPayment HistoryType = "timeoutPayment"
|
||||
)
|
85
internal/repository/history.go
Normal file
85
internal/repository/history.go
Normal file
@ -0,0 +1,85 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"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"
|
||||
)
|
||||
|
||||
type HistoryRepositoryDeps struct {
|
||||
Logger *zap.Logger
|
||||
MongoDB *mongo.Collection
|
||||
}
|
||||
|
||||
type HistoryRepository struct {
|
||||
logger *zap.Logger
|
||||
mongoDB *mongo.Collection
|
||||
}
|
||||
|
||||
func NewHistoryRepository(deps *HistoryRepositoryDeps) *HistoryRepository {
|
||||
if deps == nil {
|
||||
log.Panicln("deps is nil on <NewHistoryRepository>")
|
||||
}
|
||||
|
||||
if deps.Logger == nil {
|
||||
log.Panicln("logger is nil on <NewHistoryRepository>")
|
||||
}
|
||||
|
||||
if deps.MongoDB == nil {
|
||||
log.Panicln("mongodb is nil on <NewHistoryRepository>")
|
||||
}
|
||||
|
||||
return &HistoryRepository{
|
||||
logger: deps.Logger,
|
||||
mongoDB: deps.MongoDB,
|
||||
}
|
||||
}
|
||||
|
||||
func (receiver *HistoryRepository) Insert(ctx context.Context, history *models.History) (*models.History, errors.Error) {
|
||||
history.CreatedAt = time.Now()
|
||||
history.UpdatedAt = time.Now()
|
||||
history.Deleted = false
|
||||
|
||||
result, err := receiver.mongoDB.InsertOne(ctx, history)
|
||||
if err != nil {
|
||||
receiver.logger.Error("failed to insert history on <Insert> of <HistoryRepository>",
|
||||
zap.Any("history", history),
|
||||
zap.Error(err),
|
||||
)
|
||||
|
||||
return nil, errors.New(
|
||||
fmt.Errorf("failed to insert history on <Insert> of <HistoryRepository>: %w", err),
|
||||
errors.ErrInternalError,
|
||||
)
|
||||
}
|
||||
|
||||
insertedID := result.InsertedID.(primitive.ObjectID).Hex()
|
||||
history.ID = insertedID
|
||||
|
||||
return history, 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 {
|
||||
receiver.logger.Error("failed to count all documents on <CountAll> of <HistoryRepository>",
|
||||
zap.Error(err),
|
||||
)
|
||||
|
||||
return 0, errors.New(
|
||||
fmt.Errorf("failed to count all documents on <CountAll> of <HistoryRepository>: %w", err),
|
||||
errors.ErrInternalError,
|
||||
)
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
97
internal/service/history/history.go
Normal file
97
internal/service/history/history.go
Normal file
@ -0,0 +1,97 @@
|
||||
package currency
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"math"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors"
|
||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
|
||||
)
|
||||
|
||||
type historyRepository interface {
|
||||
CountAll(context.Context) (int64, errors.Error)
|
||||
FindMany(ctx context.Context, page, limit int64) ([]models.History, errors.Error)
|
||||
Insert(context.Context, *models.History) (*models.History, errors.Error)
|
||||
}
|
||||
|
||||
type Deps struct {
|
||||
Logger *zap.Logger
|
||||
Repository historyRepository
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
logger *zap.Logger
|
||||
repository historyRepository
|
||||
}
|
||||
|
||||
func New(deps *Deps) *Service {
|
||||
if deps == nil {
|
||||
log.Panicln("deps is nil on <New (history service)>")
|
||||
}
|
||||
|
||||
if deps.Logger == nil {
|
||||
log.Panicln("logger is nil on <New (history service)>")
|
||||
}
|
||||
|
||||
if deps.Repository == nil {
|
||||
log.Panicln("repository is nil on <New (history service)>")
|
||||
}
|
||||
|
||||
return &Service{
|
||||
logger: deps.Logger,
|
||||
repository: deps.Repository,
|
||||
}
|
||||
}
|
||||
|
||||
func (receiver *Service) GetHistoryList(ctx context.Context, pagination *models.Pagination) (*models.PaginationResponse[models.History], errors.Error) {
|
||||
if pagination == nil {
|
||||
return nil, errors.New(
|
||||
fmt.Errorf("pagination is nil on <GetHistoryList> of <HistoryService>: %w", errors.ErrInternalError),
|
||||
errors.ErrInternalError,
|
||||
)
|
||||
}
|
||||
|
||||
count, err := receiver.repository.CountAll(ctx)
|
||||
if err != nil {
|
||||
receiver.logger.Error("failed to count histories on <GetHistoryList> of <HistoryService>",
|
||||
zap.Error(err.Extract()),
|
||||
)
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if count == 0 {
|
||||
return &models.PaginationResponse[models.History]{TotalPages: 0, Records: []models.History{}}, nil
|
||||
}
|
||||
|
||||
totalPages := int64(math.Ceil(float64(count) / float64(pagination.Limit)))
|
||||
|
||||
histories, err := receiver.repository.FindMany(ctx, pagination.Page, pagination.Limit)
|
||||
if err != nil {
|
||||
receiver.logger.Error("failed to get historiy list on <GetHistoryList> of <HistoryService>",
|
||||
zap.Error(err.Extract()),
|
||||
zap.Int64("page", pagination.Page),
|
||||
zap.Int64("limit", pagination.Limit),
|
||||
)
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &models.PaginationResponse[models.History]{
|
||||
TotalPages: totalPages,
|
||||
Records: histories,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (receiver *Service) CreateHistory(ctx context.Context, history *models.History) (*models.History, errors.Error) {
|
||||
createdHistory, err := receiver.repository.Insert(ctx, history)
|
||||
if err != nil {
|
||||
receiver.logger.Error("failed to create history on <CreateHistory> of <HistoryService>", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return createdHistory, nil
|
||||
}
|
@ -370,66 +370,66 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
|
||||
// Base64 encoded, gzipped, json marshaled Swagger object
|
||||
var swaggerSpec = []string{
|
||||
|
||||
"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",
|
||||
"7d8BAAD//xnIgYj0QgAA",
|
||||
"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",
|
||||
"WkosduIbwox4dWH13wEAAP//CUifXPxCAAA=",
|
||||
}
|
||||
|
||||
// GetSwagger returns the content of the embedded swagger specification file
|
||||
|
@ -34,11 +34,17 @@ type walletController interface {
|
||||
PutMoney(ctx echo.Context) error
|
||||
}
|
||||
|
||||
type historyController interface {
|
||||
CreateHistory(ctx echo.Context) error
|
||||
GetHistoryList(ctx echo.Context, params GetHistoryParams) error
|
||||
}
|
||||
|
||||
type Deps struct {
|
||||
AccountController accountController
|
||||
CurrencyController currencyController
|
||||
CartController cartController
|
||||
WalletController walletController
|
||||
HistoryController historyController
|
||||
}
|
||||
|
||||
type API struct {
|
||||
@ -46,6 +52,7 @@ type API struct {
|
||||
currencyController currencyController
|
||||
cartController cartController
|
||||
walletController walletController
|
||||
historyController historyController
|
||||
}
|
||||
|
||||
func New(deps *Deps) *API {
|
||||
@ -69,11 +76,16 @@ func New(deps *Deps) *API {
|
||||
log.Panicln("walletController is nil on <New (API)>")
|
||||
}
|
||||
|
||||
if deps.HistoryController == nil {
|
||||
log.Panicln("historyController is nil on <New (API)>")
|
||||
}
|
||||
|
||||
return &API{
|
||||
accountController: deps.AccountController,
|
||||
currencyController: deps.CurrencyController,
|
||||
cartController: deps.CartController,
|
||||
walletController: deps.WalletController,
|
||||
historyController: deps.HistoryController,
|
||||
}
|
||||
}
|
||||
|
||||
@ -129,12 +141,12 @@ func (receiver *API) UpdateCurrencies(ctx echo.Context) error {
|
||||
|
||||
// History
|
||||
|
||||
func (receiver *API) GetHistory(ctx echo.Context, _ GetHistoryParams) error {
|
||||
return ctx.String(http.StatusNotImplemented, "method not implemented")
|
||||
func (receiver *API) GetHistory(ctx echo.Context, params GetHistoryParams) error {
|
||||
return receiver.historyController.GetHistoryList(ctx, params)
|
||||
}
|
||||
|
||||
func (receiver *API) Add2history(ctx echo.Context) error {
|
||||
return ctx.String(http.StatusNotImplemented, "method not implemented")
|
||||
return receiver.historyController.CreateHistory(ctx)
|
||||
}
|
||||
|
||||
// Wallet
|
||||
|
@ -670,7 +670,7 @@ components:
|
||||
истории, поэтому предлагаю в это
|
||||
поле просто класть строку с json.
|
||||
Ибо для каждого типа записи она своя.
|
||||
example: {"tariffs":["807f1f77bcf81cd799439011","807f1f77bcf81cd799439011"]}
|
||||
example: '{"tariffs":["807f1f77bcf81cd799439011","807f1f77bcf81cd799439011"]}'
|
||||
|
||||
Error:
|
||||
type: object
|
||||
|
Loading…
Reference in New Issue
Block a user