add seed database tool, fix routes
parent
115f4fdf6b
commit
253dd87c0b
@ -0,0 +1,160 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/csv"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"faculty_media_report/dbi"
|
||||
)
|
||||
|
||||
func main() {
|
||||
db, err := dbi.GetDbConn()
|
||||
if err != nil {
|
||||
log.Fatalf("GetDbConn: %v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
conn, err := db.Conn(context.Background())
|
||||
if err != nil {
|
||||
log.Fatalf("db.Conn: %v", err)
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
if err := seedUsers(conn); err != nil {
|
||||
log.Fatalf("seed users: %v", err)
|
||||
}
|
||||
if err := seedAppearances(conn); err != nil {
|
||||
log.Fatalf("seed appearances: %v", err)
|
||||
}
|
||||
if err := seedActivities(conn); err != nil {
|
||||
log.Fatalf("seed activities: %v", err)
|
||||
}
|
||||
if err := seedScholarship(conn); err != nil {
|
||||
log.Fatalf("seed scholarship: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// readCSV reads filename and returns rows as header-keyed maps.
|
||||
// Returns nil, nil if the file does not exist.
|
||||
func readCSV(filename string) ([]map[string]string, error) {
|
||||
f, err := os.Open(filename)
|
||||
if os.IsNotExist(err) {
|
||||
return nil, nil
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
records, err := csv.NewReader(f).ReadAll()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("parse %s: %w", filename, err)
|
||||
}
|
||||
if len(records) < 2 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
headers := records[0]
|
||||
rows := make([]map[string]string, 0, len(records)-1)
|
||||
for _, rec := range records[1:] {
|
||||
row := make(map[string]string, len(headers))
|
||||
for i, h := range headers {
|
||||
if i < len(rec) {
|
||||
row[h] = rec[i]
|
||||
}
|
||||
}
|
||||
rows = append(rows, row)
|
||||
}
|
||||
return rows, nil
|
||||
}
|
||||
|
||||
func seedUsers(conn *sql.Conn) error {
|
||||
rows, err := readCSV("users.csv")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, row := range rows {
|
||||
u := dbi.User{
|
||||
APIKey: row["APIKey"],
|
||||
FirstName: row["FirstName"],
|
||||
LastName: row["LastName"],
|
||||
Password: row["Password"],
|
||||
Status: row["Status"],
|
||||
Username: row["Username"],
|
||||
}
|
||||
if err := dbi.CreateUser(conn, &u); err != nil {
|
||||
return fmt.Errorf("CreateUser %q: %w", u.Username, err)
|
||||
}
|
||||
log.Printf("created user %q", u.Username)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func seedAppearances(conn *sql.Conn) error {
|
||||
rows, err := readCSV("appearances.csv")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, row := range rows {
|
||||
a := dbi.Appearance{
|
||||
UID: row["UID"],
|
||||
Title: row["Title"],
|
||||
Description: row["Description"],
|
||||
Hyperlink: row["Hyperlink"],
|
||||
Status: row["Status"],
|
||||
Username: row["Username"],
|
||||
}
|
||||
if err := dbi.CreateAppearance(conn, &a); err != nil {
|
||||
return fmt.Errorf("CreateAppearance %q: %w", a.Title, err)
|
||||
}
|
||||
log.Printf("created appearance %q", a.Title)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func seedActivities(conn *sql.Conn) error {
|
||||
rows, err := readCSV("activities.csv")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, row := range rows {
|
||||
a := dbi.Activity{
|
||||
UID: row["UID"],
|
||||
Title: row["Title"],
|
||||
Description: row["Description"],
|
||||
Hyperlink: row["Hyperlink"],
|
||||
Status: row["Status"],
|
||||
Username: row["Username"],
|
||||
}
|
||||
if err := dbi.CreateActivity(conn, &a); err != nil {
|
||||
return fmt.Errorf("CreateActivity %q: %w", a.Title, err)
|
||||
}
|
||||
log.Printf("created activity %q", a.Title)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func seedScholarship(conn *sql.Conn) error {
|
||||
rows, err := readCSV("scholarship.csv")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, row := range rows {
|
||||
s := dbi.Scholarship{
|
||||
UID: row["UID"],
|
||||
Citation: row["Citation"],
|
||||
Hyperlink: row["Hyperlink"],
|
||||
Status: row["Status"],
|
||||
Username: row["Username"],
|
||||
}
|
||||
if err := dbi.CreateScholarship(conn, &s); err != nil {
|
||||
return fmt.Errorf("CreateScholarship %q: %w", s.Citation, err)
|
||||
}
|
||||
log.Printf("created scholarship %q", s.Citation)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Loading…
Reference in New Issue