diff --git a/associationService.go b/associationService.go new file mode 100644 index 0000000..b9f6df0 --- /dev/null +++ b/associationService.go @@ -0,0 +1,66 @@ +package main + +import ( + "fmt" + "log" +) + +type AssociationService struct { + db *DB +} +type AssociationServiceQuery struct { + LHSID *int64 `db:"lhs"` + RHSID *int64 `db:"rhs"` + NoteID *int64 `db:"note"` + ID *int64 `db:"id"` +} + +func (as *AssociationService) Query(query AssociationServiceQuery) ([]Association, error) { + res := []Association{} + sqlQuery := "SELECT id, lhs, rhs, note FROM association" + whereQuery := BuildWhereQuery(query) + if whereQuery != "" { + sqlQuery += " " + whereQuery + } + + rows, err := as.db.readConn.Query(sqlQuery) + if err != nil { + return res, fmt.Errorf("failed getting associations for query %q: %v", sqlQuery, err) + } + defer rows.Close() + + for rows.Next() { + association := Association{} + err := rows.Scan(&association.ID, &association.LHS.ID, &association.RHS.ID, &association.Note) + if err != nil { + return res, fmt.Errorf("failed scanning association: %v", err) + } + res = append(res, association) + } + + return res, nil +} + +func (as *AssociationService) Create(lhs Player, rhs Player, note string) (Association, error) { + log.Printf("Creating association between %d and %d with note %s", lhs.ID, rhs.ID, note) + association := Association{} + res, err := as.db.writeConn.Exec("insert into association (lhs, rhs, note) values (?, ?, ?)", lhs.ID, rhs.ID, note) + if err != nil { + return association, fmt.Errorf("failed to insert association: %v", err) + } + + id, err := res.LastInsertId() + if err != nil { + return association, fmt.Errorf("failed to get last insert id: %v", err) + } + log.Printf("Created association between %d and %d with note %s with id %d", lhs.ID, rhs.ID, note, id) + + qres, err := as.Query(AssociationServiceQuery{ID: &id}) + if err != nil { + return association, fmt.Errorf("failed getting association for id %d: %v", id, err) + } + if len(qres) > 1 { + return association, fmt.Errorf("more than one association found for id %d", id) + } + return qres[0], nil +} \ No newline at end of file