home to your local SPACEGIRL 馃挮 arimelody.space
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at dev 67 lines 1.6 kB view raw
1package controller 2 3import ( 4 "arimelody-web/model" 5 "math/rand" 6 "strings" 7 "time" 8 9 "github.com/jmoiron/sqlx" 10) 11 12var inviteChars = []byte("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") 13 14func GetInvite(db *sqlx.DB, code string) (*model.Invite, error) { 15 invite := model.Invite{} 16 17 err := db.Get(&invite, "SELECT * FROM invite WHERE code=$1", code) 18 if err != nil { 19 if strings.Contains(err.Error(), "no rows") { 20 return nil, nil 21 } 22 return nil, err 23 } 24 25 return &invite, nil 26} 27 28func CreateInvite(db *sqlx.DB, length int, lifetime time.Duration) (*model.Invite, error) { 29 invite := model.Invite{ 30 CreatedAt: time.Now(), 31 ExpiresAt: time.Now().Add(lifetime), 32 } 33 34 code := []byte{} 35 for i := 0; i < length; i++ { 36 code = append(code, inviteChars[rand.Intn(len(inviteChars) - 1)]) 37 } 38 invite.Code = string(code) 39 40 _, err := db.Exec( 41 "INSERT INTO invite (code, created_at, expires_at) " + 42 "VALUES ($1, $2, $3)", 43 invite.Code, 44 invite.CreatedAt, 45 invite.ExpiresAt, 46 ) 47 if err != nil { 48 return nil, err 49 } 50 51 return &invite, nil 52} 53 54func DeleteInvite(db *sqlx.DB, code string) error { 55 _, err := db.Exec("DELETE FROM invite WHERE code=$1", code) 56 return err 57} 58 59func DeleteAllInvites(db *sqlx.DB) error { 60 _, err := db.Exec("DELETE FROM invite") 61 return err 62} 63 64func DeleteExpiredInvites(db *sqlx.DB) error { 65 _, err := db.Exec("DELETE FROM invite WHERE expires_at<current_timestamp") 66 return err 67}