forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at master 2.5 kB view raw
1package db 2 3import ( 4 "database/sql" 5 "fmt" 6 "strings" 7 "time" 8 9 "tangled.org/core/appview/models" 10 "tangled.org/core/orm" 11) 12 13func GetRegistrations(e Execer, filters ...orm.Filter) ([]models.Registration, error) { 14 var registrations []models.Registration 15 16 var conditions []string 17 var args []any 18 for _, filter := range filters { 19 conditions = append(conditions, filter.Condition()) 20 args = append(args, filter.Arg()...) 21 } 22 23 whereClause := "" 24 if conditions != nil { 25 whereClause = " where " + strings.Join(conditions, " and ") 26 } 27 28 query := fmt.Sprintf(` 29 select id, domain, did, created, registered, needs_upgrade 30 from registrations 31 %s 32 order by created 33 `, 34 whereClause, 35 ) 36 37 rows, err := e.Query(query, args...) 38 if err != nil { 39 return nil, err 40 } 41 42 for rows.Next() { 43 var createdAt string 44 var registeredAt sql.Null[string] 45 var needsUpgrade int 46 var reg models.Registration 47 48 err = rows.Scan(&reg.Id, &reg.Domain, &reg.ByDid, &createdAt, &registeredAt, &needsUpgrade) 49 if err != nil { 50 return nil, err 51 } 52 53 if t, err := time.Parse(time.RFC3339, createdAt); err == nil { 54 reg.Created = &t 55 } 56 57 if registeredAt.Valid { 58 if t, err := time.Parse(time.RFC3339, registeredAt.V); err == nil { 59 reg.Registered = &t 60 } 61 } 62 63 if needsUpgrade != 0 { 64 reg.NeedsUpgrade = true 65 } 66 67 registrations = append(registrations, reg) 68 } 69 70 return registrations, nil 71} 72 73func MarkRegistered(e Execer, filters ...orm.Filter) error { 74 var conditions []string 75 var args []any 76 for _, filter := range filters { 77 conditions = append(conditions, filter.Condition()) 78 args = append(args, filter.Arg()...) 79 } 80 81 query := "update registrations set registered = strftime('%Y-%m-%dT%H:%M:%SZ', 'now'), needs_upgrade = 0" 82 if len(conditions) > 0 { 83 query += " where " + strings.Join(conditions, " and ") 84 } 85 86 _, err := e.Exec(query, args...) 87 return err 88} 89 90func AddKnot(e Execer, domain, did string) error { 91 _, err := e.Exec(` 92 insert into registrations (domain, did) 93 values (?, ?) 94 `, domain, did) 95 return err 96} 97 98func DeleteKnot(e Execer, filters ...orm.Filter) error { 99 var conditions []string 100 var args []any 101 for _, filter := range filters { 102 conditions = append(conditions, filter.Condition()) 103 args = append(args, filter.Arg()...) 104 } 105 106 whereClause := "" 107 if conditions != nil { 108 whereClause = " where " + strings.Join(conditions, " and ") 109 } 110 111 query := fmt.Sprintf(`delete from registrations %s`, whereClause) 112 113 _, err := e.Exec(query, args...) 114 return err 115}