1
0
mirror of https://github.com/ManyakRus/crud_generator.git synced 2025-02-03 09:57:21 +02:00

318 lines
8.1 KiB
Plaintext
Raw Normal View History

2023-10-23 18:09:55 +03:00
package db_lawsuit_status_types
import (
"context"
"errors"
"fmt"
"github.com/ManyakRus/starter/micro"
"github.com/ManyakRus/starter/postgres_gorm"
2023-11-01 17:34:57 +03:00
"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/db/constants"
"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/object_model/entities/lawsuit_status_types"
2023-10-23 18:09:55 +03:00
"gorm.io/gorm"
"time"
"github.com/ManyakRus/starter/contextmain"
2023-10-23 18:09:55 +03:00
)
// TableName - имя таблицы в БД Postgres
const TableName string = "lawsuit_status_types"
// Crud_DB - объект для CRUD операций через БД
type Crud_DB struct {
}
// Read - находит запись в БД по ID
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Read(m *lawsuit_status_types.LawsuitStatusType) error {
2023-10-23 18:09:55 +03:00
var err error
ctxMain := contextmain.GetContext()
2023-10-23 18:09:55 +03:00
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(constants.TIMEOUT_DB_SECONDS))
defer ctxCancelFunc()
2023-10-25 17:30:18 +03:00
err = crud.Read_ctx(ctx, m)
2023-10-23 18:09:55 +03:00
return err
}
// Read_ctx - находит запись в БД по ID
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Read_ctx(ctx context.Context, m *lawsuit_status_types.LawsuitStatusType) error {
2023-10-23 18:09:55 +03:00
var err error
if micro.ContextDone(ctx) == true {
err = context.Canceled
return err
}
2023-11-02 18:19:33 +03:00
id := int64(m.ID)
2023-10-23 18:09:55 +03:00
db := postgres_gorm.GetConnection()
db.WithContext(ctx)
2023-10-25 17:30:18 +03:00
tx := db.First(m, id)
2023-10-23 18:09:55 +03:00
err = tx.Error
return err
}
// Save - записывает новый или существующий объект в базу данных
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Save(m *lawsuit_status_types.LawsuitStatusType) error {
ctxMain := contextmain.GetContext()
2023-10-23 18:09:55 +03:00
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(constants.TIMEOUT_DB_SECONDS))
defer ctxCancelFunc()
2023-10-25 17:30:18 +03:00
err := crud.Save_ctx(ctx, m)
2023-10-23 18:09:55 +03:00
return err
}
// Save_ctx - записывает новый или существующий объект в базу данных
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Save_ctx(ctx context.Context, m *lawsuit_status_types.LawsuitStatusType) error {
var err error
if micro.ContextDone(ctx) == true {
err = context.Canceled
return err
}
2023-11-02 18:19:33 +03:00
is_create := !micro.BoolFromInt64(int64(m.ID))
err = crud.create_update_ctx(ctx, m, is_create)
2023-10-23 18:09:55 +03:00
return err
}
// Update - записывает существующий объект в базу данных
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Update(m *lawsuit_status_types.LawsuitStatusType) error {
ctxMain := contextmain.GetContext()
2023-10-23 18:09:55 +03:00
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(constants.TIMEOUT_DB_SECONDS))
defer ctxCancelFunc()
2023-10-25 17:30:18 +03:00
err := crud.Update_ctx(ctx, m)
2023-10-23 18:09:55 +03:00
return err
}
// Update_ctx - записывает существующий объект в базу данных
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Update_ctx(ctx context.Context, m *lawsuit_status_types.LawsuitStatusType) error {
var err error
if micro.ContextDone(ctx) == true {
err = context.Canceled
return err
}
err = crud.create_update_ctx(ctx, m, false)
2023-10-23 18:09:55 +03:00
return err
}
// Create - записывает новый объект в базу данных
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Create(m *lawsuit_status_types.LawsuitStatusType) error {
ctxMain := contextmain.GetContext()
2023-10-23 18:09:55 +03:00
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(constants.TIMEOUT_DB_SECONDS))
defer ctxCancelFunc()
2023-10-25 17:30:18 +03:00
err := crud.Create_ctx(ctx, m)
2023-10-23 18:09:55 +03:00
return err
}
// Create_ctx - записывает новый объект в базу данных
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Create_ctx(ctx context.Context, m *lawsuit_status_types.LawsuitStatusType) error {
var err error
if micro.ContextDone(ctx) == true {
err = context.Canceled
return err
}
err = crud.create_update_ctx(ctx, m, true)
2023-10-23 18:09:55 +03:00
return err
}
// create_update - записывает объект в базу данных
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) create_update(m *lawsuit_status_types.LawsuitStatusType, is_create bool) error {
2023-10-23 18:09:55 +03:00
var err error
ctxMain := contextmain.GetContext()
2023-10-23 18:09:55 +03:00
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(constants.TIMEOUT_DB_SECONDS))
defer ctxCancelFunc()
2023-10-25 17:30:18 +03:00
err = crud.create_update_ctx(ctx, m, is_create)
2023-10-23 18:09:55 +03:00
return err
}
// create_update_ctx - записывает объект в базу данных
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) create_update_ctx(ctx context.Context, m *lawsuit_status_types.LawsuitStatusType, is_create bool) error {
2023-10-23 18:09:55 +03:00
var err error
2023-11-02 18:19:33 +03:00
// log.Trace("start Save() ", TableName, " id: ", int64(m.ID))
2023-10-23 18:09:55 +03:00
if micro.ContextDone(ctx) == true {
err = context.Canceled
return err
}
2023-10-23 18:09:55 +03:00
// проверка ID
if is_create == true {
2023-11-02 18:19:33 +03:00
if int64(m.ID) != 0 {
2023-10-23 18:09:55 +03:00
TextError := fmt.Sprint("db.Save() ", TableName, " error: id !=0")
2023-11-01 17:34:57 +03:00
// log.Panic(sError)
2023-10-23 18:09:55 +03:00
err = errors.New(TextError)
return err
}
2023-11-02 18:19:33 +03:00
} else if int64(m.ID) == 0 {
2023-10-23 18:09:55 +03:00
TextError := fmt.Sprint("db.Save() ", TableName, " error: id =0")
err = errors.New(TextError)
2023-11-01 17:34:57 +03:00
// log.Panic(sError)
2023-10-23 18:09:55 +03:00
return err
}
//
db := postgres_gorm.GetConnection()
db.WithContext(ctx)
2023-11-01 17:34:57 +03:00
// заполним даты
2023-11-02 18:19:33 +03:00
//Text_modified_at
//Text_is_deleted_deleted_at
2023-10-23 18:09:55 +03:00
2023-11-02 15:57:13 +03:00
//колонки с null
2023-10-23 18:09:55 +03:00
tx := db
MassOmit := make([]string, 0)
var ColumnName string
2023-11-02 15:57:13 +03:00
//игнор пустых колонок
2023-10-23 18:09:55 +03:00
tx = tx.Omit(MassOmit...)
2023-11-01 17:34:57 +03:00
// запись
2023-10-23 18:09:55 +03:00
if is_create == true {
2023-10-25 17:30:18 +03:00
tx = tx.Create(&m)
2023-10-23 18:09:55 +03:00
} else {
2023-10-25 17:30:18 +03:00
tx = tx.Save(&m)
2023-10-23 18:09:55 +03:00
}
err = tx.Error
if err != nil {
return err
}
2023-11-01 17:34:57 +03:00
// запишем NULL в пустые колонки
2023-10-23 18:09:55 +03:00
for f := 0; f < len(MassOmit); f++ {
ColumnName := MassOmit[f]
2023-10-25 17:30:18 +03:00
tx = db.Model(&m).Update(ColumnName, gorm.Expr("NULL"))
2023-10-23 18:09:55 +03:00
err = tx.Error
if err != nil {
2023-10-25 17:30:18 +03:00
TextError := fmt.Sprint("db.Update() ", TableName, " id: ", m.ID, " error: ", err)
2023-10-23 18:09:55 +03:00
err = errors.New(TextError)
return err
2023-11-01 17:34:57 +03:00
// log.Panic(sError)
2023-10-23 18:09:55 +03:00
}
}
return err
}
// Delete - записывает is_deleted = true
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Delete(m *lawsuit_status_types.LawsuitStatusType) error {
2023-10-23 18:09:55 +03:00
var err error
ctxMain := contextmain.GetContext()
2023-10-23 18:09:55 +03:00
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(constants.TIMEOUT_DB_SECONDS))
defer ctxCancelFunc()
2023-10-25 17:30:18 +03:00
err = crud.Delete_ctx(ctx, m)
2023-10-23 18:09:55 +03:00
return err
}
// Delete_ctx - записывает is_deleted = true
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Delete_ctx(ctx context.Context, m *lawsuit_status_types.LawsuitStatusType) error {
2023-10-23 18:09:55 +03:00
var err error
if micro.ContextDone(ctx) == true {
err = context.Canceled
return err
}
2023-11-01 17:34:57 +03:00
m2 := lawsuit_status_types.LawsuitStatusType{}
2023-10-25 17:30:18 +03:00
m2.ID = m.ID
err = crud.Read_ctx(ctx, &m2)
2023-10-23 18:09:55 +03:00
if err != nil {
return err
}
2023-10-25 17:30:18 +03:00
m2.IsDeleted = true
m.IsDeleted = true
2023-10-23 18:09:55 +03:00
2023-10-25 17:30:18 +03:00
err = crud.Save_ctx(ctx, &m2)
2023-10-23 18:09:55 +03:00
return err
}
// Restore - записывает is_deleted = true
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Restore(m *lawsuit_status_types.LawsuitStatusType) error {
2023-10-23 18:09:55 +03:00
var err error
ctxMain := contextmain.GetContext()
2023-10-23 18:09:55 +03:00
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(constants.TIMEOUT_DB_SECONDS))
defer ctxCancelFunc()
2023-10-25 17:30:18 +03:00
err = crud.Restore_ctx(ctx, m)
2023-10-23 18:09:55 +03:00
return err
}
// Restore_ctx - записывает is_deleted = true
2023-11-01 17:34:57 +03:00
func (crud Crud_DB) Restore_ctx(ctx context.Context, m *lawsuit_status_types.LawsuitStatusType) error {
2023-10-23 18:09:55 +03:00
var err error
if micro.ContextDone(ctx) == true {
err = context.Canceled
return err
}
2023-11-01 17:34:57 +03:00
m2 := lawsuit_status_types.LawsuitStatusType{}
2023-10-25 17:30:18 +03:00
m2.ID = m.ID
err = crud.Read_ctx(ctx, &m2)
2023-10-23 18:09:55 +03:00
if err != nil {
return err
}
2023-10-25 17:30:18 +03:00
m2.IsDeleted = false
m.IsDeleted = false
2023-10-23 18:09:55 +03:00
2023-10-25 17:30:18 +03:00
err = crud.Save_ctx(ctx, &m2)
2023-10-23 18:09:55 +03:00
return err
}
2023-10-26 15:23:47 +03:00
// Find_ByExtID - находит запись в БД по ext_id и connection_id
2023-11-07 17:58:02 +03:00
func (crud Crud_DB) Find_ByExtID(m *lawsuit_status_types.LawsuitStatusType) error {
2023-10-26 15:23:47 +03:00
var err error
2023-11-07 17:58:02 +03:00
if m.ExtID == 0 {
2023-11-02 18:19:33 +03:00
err = errors.New("Error: ext_id =0")
2023-11-07 17:58:02 +03:00
return err
2023-10-26 15:23:47 +03:00
}
//
ctxMain := contextmain.GetContext()
2023-10-26 15:23:47 +03:00
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(constants.TIMEOUT_DB_SECONDS))
defer ctxCancelFunc()
2023-11-07 17:58:02 +03:00
err = crud.Find_ByExtID_ctx(ctx, m)
2023-10-26 15:23:47 +03:00
2023-11-07 17:58:02 +03:00
return err
2023-10-26 15:23:47 +03:00
}
// Find_ByExtID_ctx - находит запись в БД по ext_id и connection_id
2023-11-07 17:58:02 +03:00
func (crud Crud_DB) Find_ByExtID_ctx(ctx context.Context, m *lawsuit_status_types.LawsuitStatusType) error {
2023-10-26 15:23:47 +03:00
var err error
if micro.ContextDone(ctx) == true {
err = context.Canceled
return err
}
2023-11-07 17:58:02 +03:00
if m.ExtID == 0 {
err = errors.New("Error: ExtID=0")
return err
2023-10-26 15:23:47 +03:00
}
db := postgres_gorm.GetConnection()
db.WithContext(ctx)
2023-11-07 17:58:02 +03:00
tx := db.Where("ext_id = ?", m.ExtID).Where("connection_id = ?", m.ConnectionID).First(m)
2023-10-26 15:23:47 +03:00
err = tx.Error
2023-11-07 17:58:02 +03:00
return err
2023-10-26 15:23:47 +03:00
}