home to your local SPACEGIRL 💫 arimelody.space
1
fork

Configure Feed

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

listAccounts command

+50 -9
+1
README.md
··· 40 40 41 41 - `createInvite`: Creates an invite code to register new accounts. 42 42 - `purgeInvites`: Deletes all available invite codes. 43 + - `listAccounts`: Lists all active accounts. 43 44 - `deleteAccount <username>`: Deletes an account with a given `username`. 44 45 45 46 ## database
+11
controller/account.go
··· 11 11 "github.com/jmoiron/sqlx" 12 12 ) 13 13 14 + func GetAllAccounts(db *sqlx.DB) ([]model.Account, error) { 15 + var accounts = []model.Account{} 16 + 17 + err := db.Select(&accounts, "SELECT * FROM account ORDER BY created_at ASC") 18 + if err != nil { 19 + return nil, err 20 + } 21 + 22 + return accounts, nil 23 + } 24 + 14 25 func GetAccount(db *sqlx.DB, username string) (*model.Account, error) { 15 26 var account = model.Account{} 16 27
+25 -2
main.go
··· 98 98 fmt.Printf("Invites deleted successfully.\n") 99 99 return 100 100 101 + case "listAccounts": 102 + accounts, err := controller.GetAllAccounts(global.DB) 103 + if err != nil { 104 + fmt.Fprintf(os.Stderr, "Failed to fetch accounts: %v\n", err) 105 + os.Exit(1) 106 + } 107 + 108 + for _, account := range accounts { 109 + fmt.Printf( 110 + "User: %s\n" + 111 + "\tID: %s\n" + 112 + "\tEmail: %s\n" + 113 + "\tCreated: %s\n", 114 + account.Username, 115 + account.ID, 116 + account.Email, 117 + account.CreatedAt, 118 + ) 119 + } 120 + return 121 + 101 122 case "deleteAccount": 102 123 if len(os.Args) < 2 { 103 124 fmt.Fprintf(os.Stderr, "FATAL: Account name not specified for -deleteAccount\n") ··· 108 129 109 130 account, err := controller.GetAccount(global.DB, username) 110 131 if err != nil { 111 - fmt.Fprintf(os.Stderr, "Failed to fetch account \"%s\": %s\n", username, err.Error()) 132 + fmt.Fprintf(os.Stderr, "Failed to fetch account \"%s\": %v\n", username, err) 112 133 os.Exit(1) 113 134 } 114 135 ··· 135 156 136 157 } 137 158 138 - fmt.Printf( 159 + // command help 160 + fmt.Print( 139 161 "Available commands:\n\n" + 140 162 "createInvite:\n\tCreates an invite code to register new accounts.\n" + 141 163 "purgeInvites:\n\tDeletes all available invite codes.\n" + 164 + "listAccounts:\n\tLists all active accounts.\n", 142 165 "deleteAccount <username>:\n\tDeletes an account with a given `username`.\n", 143 166 ) 144 167 return
+9 -5
model/account.go
··· 1 1 package model 2 2 3 + import "time" 4 + 3 5 type ( 4 6 Account struct { 5 - ID string `json:"id" db:"id"` 6 - Username string `json:"username" db:"username"` 7 - Password string `json:"password" db:"password"` 8 - Email string `json:"email" db:"email"` 9 - AvatarURL string `json:"avatar_url" db:"avatar_url"` 7 + ID string `json:"id" db:"id"` 8 + Username string `json:"username" db:"username"` 9 + Password string `json:"password" db:"password"` 10 + Email string `json:"email" db:"email"` 11 + AvatarURL string `json:"avatar_url" db:"avatar_url"` 12 + CreatedAt time.Time `json:"created_at" db:"created_at"` 13 + 10 14 Privileges []AccountPrivilege `json:"privileges"` 11 15 } 12 16
+2 -1
schema_migration/000-init.sql
··· 16 16 username text NOT NULL UNIQUE, 17 17 password text NOT NULL, 18 18 email text, 19 - avatar_url text 19 + avatar_url text, 20 + created_at TIMESTAMP DEFAULT current_timestamp 20 21 ); 21 22 ALTER TABLE arimelody.account ADD CONSTRAINT account_pk PRIMARY KEY (id); 22 23
+2 -1
schema_migration/001-pre-versioning.sql
··· 22 22 username text NOT NULL UNIQUE, 23 23 password text NOT NULL, 24 24 email text, 25 - avatar_url text 25 + avatar_url text, 26 + created_at TIMESTAMP DEFAULT current_timestamp 26 27 ); 27 28 ALTER TABLE arimelody.account ADD CONSTRAINT account_pk PRIMARY KEY (id); 28 29