Show total responses on admin page

This commit is contained in:
2020-04-16 07:51:24 -06:00
parent 00425829c8
commit 051e5f4601
2 changed files with 53 additions and 13 deletions

View File

@ -133,17 +133,17 @@ func (s *Store) CreateEvent(ctx context.Context, cmd CreateEventCommand) (result
return
}
type GetEventQuery struct {
type GetEventMetadataQuery struct {
AlphaID string
}
type GetEventResult struct {
type GetEventMetadataResult struct {
Name string
Description string
EarliestDate, LatestDate time.Time
}
func (s *Store) GetEvent(ctx context.Context, query GetEventQuery) (GetEventResult, error) {
func (s *Store) GetEventMetadata(ctx context.Context, query GetEventMetadataQuery) (GetEventMetadataResult, error) {
conn := s.pool.Get(ctx)
defer s.pool.Put(conn)
@ -151,7 +151,7 @@ func (s *Store) GetEvent(ctx context.Context, query GetEventQuery) (GetEventResu
SELECT name, description, earliest_date, latest_date
FROM event
WHERE alpha_id = ?;`
var result GetEventResult
var result GetEventMetadataResult
var found bool
err := sqlitex.Exec(conn, dbQuery,
func(stmt *sqlite.Stmt) error {
@ -171,11 +171,38 @@ func (s *Store) GetEvent(ctx context.Context, query GetEventQuery) (GetEventResu
return err
}, query.AlphaID)
if err != nil {
return GetEventResult{}, err
return GetEventMetadataResult{}, err
}
if !found {
// TODO return a constant or a specific error type for Not Found
return GetEventResult{}, errors.New("not found")
return GetEventMetadataResult{}, errors.New("not found")
}
return result, nil
}
type GetEventResponsesQuery struct {
AlphaID string
}
type GetEventResponsesResult struct {
TotalResponses int
}
func (s *Store) GetEventResponses(ctx context.Context, query GetEventResponsesQuery) (GetEventResponsesResult, error) {
conn := s.pool.Get(ctx)
defer s.pool.Put(conn)
var result GetEventResponsesResult
const dbQuery = `
SELECT COUNT(*)
FROM response
JOIN event ON response.event_id = event.id
WHERE event.alpha_id = ?;`
err := sqlitex.Exec(conn, dbQuery,
func(stmt *sqlite.Stmt) error {
result.TotalResponses = stmt.ColumnInt(0)
return nil
}, query.AlphaID)
// TODO return an error if the event does not exist?
return result, err
}