add driversLicence model

This commit is contained in:
Alex
2024-09-29 21:16:58 +02:00
parent 41738753f0
commit 8a581da1d8
9 changed files with 135 additions and 16 deletions

View File

@@ -7,6 +7,25 @@ type roles struct {
Admin int8 Admin int8
} }
type licences struct {
AM string
A1 string
A2 string
A string
B string
C1 string
C string
D1 string
D string
BE string
C1E string
CE string
D1E string
DE string
L string
T string
}
const ( const (
UnverifiedStatus = iota + 1 UnverifiedStatus = iota + 1
VerifiedStatus VerifiedStatus
@@ -29,6 +48,25 @@ var Roles = roles{
Admin: 8, Admin: 8,
} }
var Licences = licences{
AM: "AM",
A1: "A1",
A2: "A2",
A: "A",
B: "B",
C1: "C1",
C: "C",
D1: "D1",
D: "D",
BE: "BE",
C1E: "C1E",
CE: "CE",
D1E: "D1E",
DE: "DE",
L: "L",
T: "T",
}
const PRIV_VIEW = 1 const PRIV_VIEW = 1
const PRIV_ADD = 2 const PRIV_ADD = 2
const PRIV_EDIT = 4 const PRIV_EDIT = 4

View File

@@ -209,7 +209,6 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
c.JSON(http.StatusNotAcceptable, gin.H{"error": "No subscription model provided"}) c.JSON(http.StatusNotAcceptable, gin.H{"error": "No subscription model provided"})
return return
} }
logger.Error.Printf("user.membership: %#v", regData.User.Membership)
selectedModel, err := uc.MembershipService.GetModelByName(&regData.User.Membership.SubscriptionModel.Name) selectedModel, err := uc.MembershipService.GetModelByName(&regData.User.Membership.SubscriptionModel.Name)
if err != nil { if err != nil {
logger.Error.Printf("%v:No subscription model found: %#v", regData.User.Email, err) logger.Error.Printf("%v:No subscription model found: %#v", regData.User.Email, err)
@@ -217,7 +216,6 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
return return
} }
regData.User.Membership.SubscriptionModel = *selectedModel regData.User.Membership.SubscriptionModel = *selectedModel
// logger.Info.Printf("REGISTERING user: %#v", regData.User)
regData.User.RoleID = constants.Roles.Member regData.User.RoleID = constants.Roles.Member

View File

@@ -27,6 +27,8 @@ func Open(dbPath string, adminMail string) error {
&models.Membership{}, &models.Membership{},
&models.Consent{}, &models.Consent{},
&models.Verification{}, &models.Verification{},
&models.DriversLicence{},
&models.LicenceCategory{},
&models.BankAccount{}); err != nil { &models.BankAccount{}); err != nil {
logger.Error.Fatalf("Couldn't create database: %v", err) logger.Error.Fatalf("Couldn't create database: %v", err)
return err return err
@@ -51,6 +53,13 @@ func Open(dbPath string, adminMail string) error {
return err return err
} }
categories := createLicenceCategories()
for _, model := range categories {
result := db.Create(&model)
if result.Error != nil {
return result.Error
}
}
admin, err := createAdmin(adminMail, createdModel.ID) admin, err := createAdmin(adminMail, createdModel.ID)
if err != nil { if err != nil {
return err return err
@@ -73,6 +82,28 @@ func createSubscriptionModels() []models.SubscriptionModel {
}, },
} }
} }
func createLicenceCategories() []models.LicenceCategory {
return []models.LicenceCategory{
{Category: "AM"},
{Category: "A1"},
{Category: "A2"},
{Category: "A"},
{Category: "B"},
{Category: "C1"},
{Category: "C"},
{Category: "D1"},
{Category: "D"},
{Category: "BE"},
{Category: "C1E"},
{Category: "CE"},
{Category: "D1E"},
{Category: "DE"},
{Category: "R"},
{Category: "L"},
}
}
// TODO: Landing page to create an admin // TODO: Landing page to create an admin
func createAdmin(userMail string, subscriptionModelID uint) (*models.User, error) { func createAdmin(userMail string, subscriptionModelID uint) (*models.User, error) {

View File

@@ -0,0 +1,27 @@
package models
import (
"time"
"gorm.io/gorm"
)
type DriversLicence struct {
gorm.Model
Status int8 `json:"licence_status" validate:"omitempty,number"`
LicenceNumber string `json:"licence_number" validate:"safe_content"`
IssuedDate time.Time `json:"licence_issued_date" validate:"omitempty,lte"`
ExpirationDate time.Time `json:"licence_expiration_date" validate:"omitempty,gt"`
IssuingCountry string `json:"licence_country" validate:"safe_content"`
LicenceCategories []LicenceCategory `json:"licence_categories" gorm:"many2many:licence_2_categories"`
}
type LicenceCategory struct {
gorm.Model
Category string `json:"licence_category" validate:"safe_content"`
}
// func (d *DriversLicence) BeforeCreate(tx *gorm.DB) (err error) {
// d.Status = constants.UnverifiedStatus
// return
// }

View File

@@ -29,6 +29,8 @@ type User struct {
VerificationID uint VerificationID uint
Membership Membership `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"membership"` Membership Membership `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"membership"`
MembershipID uint MembershipID uint
DriversLicence DriversLicence `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"drivers_licence"`
DriversLicenceID uint
ID uint `json:"id"` ID uint `json:"id"`
PaymentStatus int8 `json:"payment_status"` PaymentStatus int8 `json:"payment_status"`
Status int8 `json:"status"` Status int8 `json:"status"`

View File

@@ -0,0 +1,25 @@
package repositories
import (
"GoMembership/internal/database"
"GoMembership/internal/models"
)
type DriversLicenceInterface interface {
FindCategoryByName(categoryName string) (models.LicenceCategory, error)
FindCategoriesByIDs(ids []uint) ([]models.LicenceCategory, error)
}
type DriversLicenceRepository struct{}
func (r *DriversLicenceRepository) FindCategoriesByIDs(ids []uint) ([]models.LicenceCategory, error) {
var categories []models.LicenceCategory
err := database.DB.Where("id IN ?", ids).Find(&categories).Error
return categories, err
}
func (r *DriversLicenceRepository) FindCategoryByName(categoryName string) (models.LicenceCategory, error) {
var category models.LicenceCategory
err := database.DB.Where("category = ?", categoryName).First(&category).Error
return category, err
}

View File

@@ -68,12 +68,10 @@ func (ur *UserRepository) UpdateUser(user *models.User) (*models.User, error) {
func (ur *UserRepository) GetUsers(where map[string]interface{}) (*[]models.User, error) { func (ur *UserRepository) GetUsers(where map[string]interface{}) (*[]models.User, error) {
var users []models.User var users []models.User
result := database.DB. result := database.DB.
Preload("Consents"). Preload(clause.Associations).
Preload("BankAccount"). Preload("Membership.SubscriptionModel").
Preload("Verification"). Preload("DriversLicence.LicenceCategories").
Preload("Membership", func(db *gorm.DB) *gorm.DB { Where(where).Find(&users)
return db.Preload("SubscriptionModel")
}).Where(where).Find(&users)
if result.Error != nil { if result.Error != nil {
if result.Error == gorm.ErrRecordNotFound { if result.Error == gorm.ErrRecordNotFound {
return nil, gorm.ErrRecordNotFound return nil, gorm.ErrRecordNotFound
@@ -86,12 +84,10 @@ func (ur *UserRepository) GetUsers(where map[string]interface{}) (*[]models.User
func (ur *UserRepository) GetUserByID(userID *uint) (*models.User, error) { func (ur *UserRepository) GetUserByID(userID *uint) (*models.User, error) {
var user models.User var user models.User
result := database.DB. result := database.DB.
Preload("Consents"). Preload(clause.Associations).
Preload("BankAccount"). Preload("Membership.SubscriptionModel").
Preload("Verification"). Preload("DriversLicence.LicenceCategories").
Preload("Membership", func(db *gorm.DB) *gorm.DB { First(&user, userID)
return db.Preload("SubscriptionModel")
}).First(&user, userID)
if result.Error != nil { if result.Error != nil {
if result.Error == gorm.ErrRecordNotFound { if result.Error == gorm.ErrRecordNotFound {
return nil, gorm.ErrRecordNotFound return nil, gorm.ErrRecordNotFound

View File

@@ -39,7 +39,8 @@ func Run() {
membershipService := &services.MembershipService{Repo: membershipRepo, SubscriptionRepo: subscriptionRepo} membershipService := &services.MembershipService{Repo: membershipRepo, SubscriptionRepo: subscriptionRepo}
var userRepo repositories.UserRepositoryInterface = &repositories.UserRepository{} var userRepo repositories.UserRepositoryInterface = &repositories.UserRepository{}
userService := &services.UserService{Repo: userRepo} var licenceRepo repositories.DriversLicenceInterface = &repositories.DriversLicenceRepository{}
userService := &services.UserService{Repo: userRepo, Licences: licenceRepo}
userController := &controllers.UserController{Service: userService, EmailService: emailService, ConsentService: consentService, BankAccountService: bankAccountService, MembershipService: membershipService} userController := &controllers.UserController{Service: userService, EmailService: emailService, ConsentService: consentService, BankAccountService: bankAccountService, MembershipService: membershipService}
membershipController := &controllers.MembershipController{Service: *membershipService} membershipController := &controllers.MembershipController{Service: *membershipService}

View File

@@ -29,6 +29,7 @@ type UserServiceInterface interface {
type UserService struct { type UserService struct {
Repo repositories.UserRepositoryInterface Repo repositories.UserRepositoryInterface
Licences repositories.DriversLicenceInterface
} }
func (service *UserService) UpdateUser(user *models.User, userRole int8) (*models.User, error) { func (service *UserService) UpdateUser(user *models.User, userRole int8) (*models.User, error) {