add driversLicence model
This commit is contained in:
@@ -7,6 +7,25 @@ type roles struct {
|
||||
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 (
|
||||
UnverifiedStatus = iota + 1
|
||||
VerifiedStatus
|
||||
@@ -29,6 +48,25 @@ var Roles = roles{
|
||||
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_ADD = 2
|
||||
const PRIV_EDIT = 4
|
||||
|
||||
@@ -209,7 +209,6 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
|
||||
c.JSON(http.StatusNotAcceptable, gin.H{"error": "No subscription model provided"})
|
||||
return
|
||||
}
|
||||
logger.Error.Printf("user.membership: %#v", regData.User.Membership)
|
||||
selectedModel, err := uc.MembershipService.GetModelByName(®Data.User.Membership.SubscriptionModel.Name)
|
||||
if err != nil {
|
||||
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
|
||||
}
|
||||
regData.User.Membership.SubscriptionModel = *selectedModel
|
||||
// logger.Info.Printf("REGISTERING user: %#v", regData.User)
|
||||
|
||||
regData.User.RoleID = constants.Roles.Member
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@ func Open(dbPath string, adminMail string) error {
|
||||
&models.Membership{},
|
||||
&models.Consent{},
|
||||
&models.Verification{},
|
||||
&models.DriversLicence{},
|
||||
&models.LicenceCategory{},
|
||||
&models.BankAccount{}); err != nil {
|
||||
logger.Error.Fatalf("Couldn't create database: %v", err)
|
||||
return err
|
||||
@@ -51,6 +53,13 @@ func Open(dbPath string, adminMail string) error {
|
||||
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)
|
||||
if err != nil {
|
||||
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
|
||||
|
||||
func createAdmin(userMail string, subscriptionModelID uint) (*models.User, error) {
|
||||
|
||||
27
internal/models/drivers_licence.go
Normal file
27
internal/models/drivers_licence.go
Normal 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
|
||||
// }
|
||||
@@ -29,6 +29,8 @@ type User struct {
|
||||
VerificationID uint
|
||||
Membership Membership `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"membership"`
|
||||
MembershipID uint
|
||||
DriversLicence DriversLicence `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"drivers_licence"`
|
||||
DriversLicenceID uint
|
||||
ID uint `json:"id"`
|
||||
PaymentStatus int8 `json:"payment_status"`
|
||||
Status int8 `json:"status"`
|
||||
|
||||
25
internal/repositories/drivers_licence_repository.go
Normal file
25
internal/repositories/drivers_licence_repository.go
Normal 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
|
||||
}
|
||||
@@ -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) {
|
||||
var users []models.User
|
||||
result := database.DB.
|
||||
Preload("Consents").
|
||||
Preload("BankAccount").
|
||||
Preload("Verification").
|
||||
Preload("Membership", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("SubscriptionModel")
|
||||
}).Where(where).Find(&users)
|
||||
Preload(clause.Associations).
|
||||
Preload("Membership.SubscriptionModel").
|
||||
Preload("DriversLicence.LicenceCategories").
|
||||
Where(where).Find(&users)
|
||||
if result.Error != nil {
|
||||
if result.Error == 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) {
|
||||
var user models.User
|
||||
result := database.DB.
|
||||
Preload("Consents").
|
||||
Preload("BankAccount").
|
||||
Preload("Verification").
|
||||
Preload("Membership", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("SubscriptionModel")
|
||||
}).First(&user, userID)
|
||||
Preload(clause.Associations).
|
||||
Preload("Membership.SubscriptionModel").
|
||||
Preload("DriversLicence.LicenceCategories").
|
||||
First(&user, userID)
|
||||
if result.Error != nil {
|
||||
if result.Error == gorm.ErrRecordNotFound {
|
||||
return nil, gorm.ErrRecordNotFound
|
||||
|
||||
@@ -39,7 +39,8 @@ func Run() {
|
||||
membershipService := &services.MembershipService{Repo: membershipRepo, SubscriptionRepo: subscriptionRepo}
|
||||
|
||||
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}
|
||||
membershipController := &controllers.MembershipController{Service: *membershipService}
|
||||
|
||||
@@ -28,7 +28,8 @@ type UserServiceInterface interface {
|
||||
}
|
||||
|
||||
type UserService struct {
|
||||
Repo repositories.UserRepositoryInterface
|
||||
Repo repositories.UserRepositoryInterface
|
||||
Licences repositories.DriversLicenceInterface
|
||||
}
|
||||
|
||||
func (service *UserService) UpdateUser(user *models.User, userRole int8) (*models.User, error) {
|
||||
|
||||
Reference in New Issue
Block a user