Files
phishingclub/backend/repository/identifier.go
2025-08-21 16:14:09 +02:00

107 lines
2.2 KiB
Go

package repository
import (
"context"
"fmt"
"github.com/google/uuid"
"github.com/oapi-codegen/nullable"
"github.com/phishingclub/phishingclub/database"
"github.com/phishingclub/phishingclub/errs"
"github.com/phishingclub/phishingclub/model"
"github.com/phishingclub/phishingclub/vo"
"gorm.io/gorm"
)
var identifierAllowedColumns = assignTableToColumns(database.IDENTIFIER_TABLE, []string{
TableColumn(database.IDENTIFIER_TABLE, "name"),
})
// IdentifierOption is options for loading
type IdentifierOption struct {
*vo.QueryArgs
}
type Identifier struct {
DB *gorm.DB
}
func (i *Identifier) Insert(
ctx context.Context,
identifier *model.Identifier,
) (*uuid.UUID, error) {
id := uuid.New()
row := identifier.ToDBMap()
row["id"] = id
// AddTimestamps(row)
res := i.DB.
Model(&database.Identifier{}).
Create(row)
if res.Error != nil {
return nil, res.Error
}
return &id, nil
}
func (i *Identifier) GetByName(
ctx context.Context,
name string,
) (*model.Identifier, error) {
var row database.Identifier
res := i.DB.
Model(&database.Identifier{}).
Where(
fmt.Sprintf("%s = ?", TableColumnName(database.IDENTIFIER_TABLE)),
name,
).
First(&row)
if res.Error != nil {
return nil, res.Error
}
return ToIdentifier(&row), nil
}
func (i *Identifier) GetAll(
ctx context.Context,
option *IdentifierOption,
) (*model.Result[model.Identifier], error) {
result := model.NewEmptyResult[model.Identifier]()
rows := []database.Identifier{}
db, err := useQuery(i.DB, database.IDENTIFIER_TABLE, option.QueryArgs, identifierAllowedColumns...)
if err != nil {
return result, errs.Wrap(err)
}
res := db.
Model(&database.Identifier{}).
Find(&rows)
if res.Error != nil {
return result, res.Error
}
hasNextPage, err := useHasNextPage(db, database.IDENTIFIER_TABLE, option.QueryArgs, identifierAllowedColumns...)
if err != nil {
return result, errs.Wrap(err)
}
result.HasNextPage = hasNextPage
for _, row := range rows {
result.Rows = append(result.Rows, ToIdentifier(&row))
}
return result, nil
}
func ToIdentifier(row *database.Identifier) *model.Identifier {
id := nullable.NewNullableWithValue(row.ID)
name := nullable.NewNullableWithValue(row.Name)
return &model.Identifier{
ID: id,
Name: name,
}
}