add driversLicence model
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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(®Data.User.Membership.SubscriptionModel.Name)
|
selectedModel, err := uc.MembershipService.GetModelByName(®Data.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
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
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
|
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"`
|
||||||
|
|||||||
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) {
|
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
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ 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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user