You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
3.6 KiB
Go
162 lines
3.6 KiB
Go
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"],
|
|
DocumentLink: row["DocumentLink"],
|
|
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
|
|
}
|