/
create.go
85 lines (68 loc) · 2.08 KB
/
create.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package gorm
import (
"context"
)
// Create holds all the database record creation methods
type Create interface {
RegisterUser(ctx context.Context, user *User, contact *Contact, identifier *Identifier) error
SaveOTP(ctx context.Context, otp *OTP) error
SavePIN(ctx context.Context, pinData *UserPIN) (bool, error)
CreateResidence(ctx context.Context, payload Residence) (*Residence, error)
CreateHouse(ctx context.Context, house *House) error
}
// RegisterUser creates a new user record.
// The user can be a resident or a staff member
func (db *PGInstance) RegisterUser(ctx context.Context, user *User, contact *Contact, identifier *Identifier) error {
tx := db.DB.WithContext(ctx).Begin()
// create user
if err := tx.Create(&user).Error; err != nil {
tx.Rollback()
return err
}
// create contact
contact.UserID = user.ID
if err := tx.Create(&contact).Error; err != nil {
tx.Rollback()
return err
}
// create identifier
identifier.UserID = user.ID
if err := tx.Create(&identifier).Error; err != nil {
tx.Rollback()
return err
}
if err := tx.Commit().Error; err != nil {
tx.Rollback()
return err
}
return nil
}
// SaveOTP saves an OTP in the database
func (db *PGInstance) SaveOTP(ctx context.Context, otp *OTP) error {
if err := db.DB.WithContext(ctx).Create(&otp).Error; err != nil {
return err
}
return nil
}
// SavePIN saves a pin in the database
func (db *PGInstance) SavePIN(ctx context.Context, pinData *UserPIN) (bool, error) {
if err := db.DB.WithContext(ctx).Create(&pinData).Error; err != nil {
return false, err
}
return true, nil
}
// CreateResidence creates a new residence
func (db *PGInstance) CreateResidence(ctx context.Context, payload Residence) (*Residence, error) {
var residence *Residence
if err := db.DB.WithContext(ctx).Create(&payload).First(&residence).Error; err != nil {
return nil, err
}
return residence, nil
}
// CreateHouse creates a new house
func (db *PGInstance) CreateHouse(ctx context.Context, house *House) error {
if err := db.DB.WithContext(ctx).Create(&house).Error; err != nil {
return err
}
return nil
}