Skip to content

Commit

Permalink
Merge pull request #26 from aau-network-security/feature/query-events…
Browse files Browse the repository at this point in the history
…-by-status-#25

Feature/query events by status #25
  • Loading branch information
mrtrkmn authored Jun 10, 2020
2 parents c350d5c + d21cd8a commit f1c2e54
Show file tree
Hide file tree
Showing 7 changed files with 261 additions and 156 deletions.
4 changes: 2 additions & 2 deletions database/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ func InitTables(db *sql.DB) error {
func createTables(db *sql.DB) (string, error) {

//Create Event Table
if _, err := db.Query(CREATE_EVENT_TABLE); err != nil {
if _, err := db.Query(CreateEventTable); err != nil {
return "", err
}

//Create Teams Table
if _, err := db.Query(CREATE_TEAMS_TABLE); err != nil {
if _, err := db.Query(CreateTeamsTable); err != nil {
return "", err
}

Expand Down
27 changes: 14 additions & 13 deletions database/query.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package database

var (
CREATE_EVENT_TABLE = "CREATE TABLE IF NOT EXISTS Event(" +
CreateEventTable = "CREATE TABLE IF NOT EXISTS Event(" +
"id serial primary key, " +
"tag varchar (50), " +
"name varchar (150), " +
Expand All @@ -14,7 +14,7 @@ var (
"finish_expected varchar (100), " +
"finished_at varchar (100));"

CREATE_TEAMS_TABLE = "CREATE TABLE IF NOT EXISTS Team(" +
CreateTeamsTable = "CREATE TABLE IF NOT EXISTS Team(" +
"id serial primary key, " +
"tag varchar (50), " +
"event_id integer, " +
Expand All @@ -25,22 +25,23 @@ var (
"last_access varchar (100), " +
"solved_challenges text);"

ADD_TEAM_QUERY = "INSERT INTO team (tag, event_id, email, name, password, created_at, last_access, solved_challenges)" +
AddTeamQuery = "INSERT INTO team (tag, event_id, email, name, password, created_at, last_access, solved_challenges)" +
"VALUES ($1, $2, $3, $4, $5, $6, $7, $8)"

ADD_EVENT_QUERY = "INSERT INTO event (tag, name, available, capacity, frontends, status, exercises, started_at, finish_expected)" +
AddEventQuery = "INSERT INTO event (tag, name, available, capacity, frontends, status, exercises, started_at, finish_expected)" +
"VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)"

UPDATE_EVENT_FINISH_DATE = "UPDATE event SET finished_at = $2 WHERE tag = $1"
UPDATE_EVENT_STATUS = "UPDATE event SET status = $2 WHERE tag = $1 "
UPDATE_EVENT_LASTACCESSED_DATE = "UPDATE team SET last_access = $2 WHERE tag = $1"
UPDATE_TEAM_SOLVED_CHL = "UPDATE team SET solved_challenges = $2 WHERE tag = $1"
UpdateEventFinishDate = "UPDATE event SET finished_at = $2 WHERE tag = $1"
UpdateEventStatus = "UPDATE event SET status = $2 WHERE tag = $1 "
UpdateEventLastaccessedDate = "UPDATE team SET last_access = $2 WHERE tag = $1"
UpdateTeamSolvedChl = "UPDATE team SET solved_challenges = $2 WHERE tag = $1"

QUERY_SOLVED_CHLS = "SELECT solved_challenges FROM team WHERE tag=$1"
QUERY_EVENT_TABLE = "SELECT * FROM event"
QuerySolvedChls = "SELECT solved_challenges FROM team WHERE tag=$1"
QueryEventTable = "SELECT * FROM event"

QUERY_EVENT_ID = "SELECT id FROM event WHERE tag=$1 and finished_at is null"
QUERY_EVENT_TEAMS = "SELECT * FROM team WHERE event_id=$1"
QueryEventId = "SELECT id FROM event WHERE tag=$1 and finished_at is null"
QueryEventTeams = "SELECT * FROM team WHERE event_id=$1"

QUERY_EVENT_STATUS = "SELECT status FROM event WHERE tag=$1"
QueryEventStatus = "SELECT status FROM event WHERE tag=$1"
QueryEventsByStatus = "SELECT * FROM event WHERE status=$1"
)
89 changes: 72 additions & 17 deletions database/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,14 @@ var (
timeFormat = "2006-01-02 15:04:05"
OK = "ok"
Error = int32(3)

Running = State(0)
Suspended = State(1)
Booked = State(2)
)

type State int32

type store struct {
m sync.Mutex
db *sql.DB
Expand All @@ -31,8 +37,9 @@ type store struct {
type Store interface {
AddEvent(*pb.AddEventRequest) (string, error)
AddTeam(*pb.AddTeamRequest) (string, error)
GetEvents() ([]model.Event, error)
GetEvents(*pb.GetEventRequest) ([]model.Event, error)
GetTeams(string) ([]model.Team, error)

GetEventStatus(*pb.GetEventStatusRequest) (int32, error)
SetEventStatus(*pb.SetEventStatusRequest) (int32, error)
UpdateTeamSolvedChallenge(*pb.UpdateTeamSolvedChallengeRequest) (string, error)
Expand Down Expand Up @@ -77,7 +84,7 @@ func (s *store) AddEvent(in *pb.AddEventRequest) (string, error) {
s.m.Lock()
defer s.m.Unlock()

_, err := s.db.Exec(ADD_EVENT_QUERY, in.Tag, in.Name, in.Available, in.Capacity, in.Frontends, in.Status, in.Exercises, in.StartTime, in.ExpectedFinishTime)
_, err := s.db.Exec(AddEventQuery, in.Tag, in.Name, in.Available, in.Capacity, in.Frontends, in.Status, in.Exercises, in.StartTime, in.ExpectedFinishTime)

if err != nil {
return "", err
Expand All @@ -93,26 +100,51 @@ func (s *store) AddTeam(in *pb.AddTeamRequest) (string, error) {
nowString := now.Format(timeFormat)

var eventId int
if err := s.db.QueryRow(QUERY_EVENT_ID, in.EventTag).Scan(&eventId); err != nil {
if err := s.db.QueryRow(QueryEventId, in.EventTag).Scan(&eventId); err != nil {
return "", err
}

_, err := s.db.Exec(ADD_TEAM_QUERY, in.Id, eventId, in.Email, in.Name, in.Password, nowString, nowString, "[]")
_, err := s.db.Exec(AddTeamQuery, in.Id, eventId, in.Email, in.Name, in.Password, nowString, nowString, "[]")
if err != nil {
return "", err
}
return "Team correctly added!", nil
}

func (s *store) GetEvents() ([]model.Event, error) {

func (s *store) GetEvents(in *pb.GetEventRequest) ([]model.Event, error) {
var rows *sql.Rows
var err error
s.m.Lock()
defer s.m.Unlock()

rows, err := s.db.Query(QUERY_EVENT_TABLE)
if err != nil {
return nil, err
switch in.Status {

case int32(Running):
// query only running events
rows, err = s.db.Query(QueryEventsByStatus, int32(Running))
if err != nil {
return nil, fmt.Errorf("query running events err %v", err)
}
case int32(Suspended):
// query only suspended events
rows, err = s.db.Query(QueryEventsByStatus, int32(Suspended))
if err != nil {
return nil, fmt.Errorf("query suspended events err %v", err)
}
case int32(Booked):
// query only booked events
rows, err = s.db.Query(QueryEventsByStatus, int32(Booked))
if err != nil {
return nil, fmt.Errorf("query boooked events err %v", err)
}
default:
// all events
rows, err = s.db.Query(QueryEventTable)
if err != nil {
return nil, fmt.Errorf("query running events err %v", err)
}
}

var events []model.Event
for rows.Next() {

Expand All @@ -133,11 +165,11 @@ func (s *store) GetTeams(tag string) ([]model.Team, error) {
defer s.m.Unlock()

var eventId int
if err := s.db.QueryRow(QUERY_EVENT_ID, tag).Scan(&eventId); err != nil && !strings.Contains(err.Error(), "no rows in result set") {
if err := s.db.QueryRow(QueryEventId, tag).Scan(&eventId); err != nil && !strings.Contains(err.Error(), "no rows in result set") {
return nil, err
}

rows, err := s.db.Query(QUERY_EVENT_TEAMS, eventId)
rows, err := s.db.Query(QueryEventTeams, eventId)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -168,7 +200,7 @@ func (s *store) UpdateTeamSolvedChallenge(in *pb.UpdateTeamSolvedChallengeReques
var solvedChallenges []Challenge
var solvedChallengesDB string

if err := s.db.QueryRow(QUERY_SOLVED_CHLS, in.TeamId).Scan(&solvedChallengesDB); err != nil {
if err := s.db.QueryRow(QuerySolvedChls, in.TeamId).Scan(&solvedChallengesDB); err != nil {
return "", err
}

Expand All @@ -189,7 +221,7 @@ func (s *store) UpdateTeamSolvedChallenge(in *pb.UpdateTeamSolvedChallengeReques

newSolvedChallengesDB, _ := json.Marshal(solvedChallenges)

_, err := s.db.Exec(UPDATE_TEAM_SOLVED_CHL, in.TeamId, string(newSolvedChallengesDB))
_, err := s.db.Exec(UpdateTeamSolvedChl, in.TeamId, string(newSolvedChallengesDB))
if err != nil {
return "", err
}
Expand All @@ -201,7 +233,7 @@ func (s *store) UpdateTeamLastAccess(in *pb.UpdateTeamLastAccessRequest) (string
s.m.Lock()
defer s.m.Unlock()

_, err := s.db.Exec(UPDATE_EVENT_LASTACCESSED_DATE, in.TeamId, in.AccessAt)
_, err := s.db.Exec(UpdateEventLastaccessedDate, in.TeamId, in.AccessAt)
if err != nil {
return "", err
}
Expand All @@ -213,7 +245,7 @@ func (s *store) UpdateEventFinishDate(in *pb.UpdateEventRequest) (string, error)
s.m.Lock()
defer s.m.Unlock()

_, err := s.db.Exec(UPDATE_EVENT_FINISH_DATE, in.EventId, in.FinishedAt)
_, err := s.db.Exec(UpdateEventFinishDate, in.EventId, in.FinishedAt)
if err != nil {
return "", err
}
Expand All @@ -226,7 +258,7 @@ func (s *store) GetEventStatus(in *pb.GetEventStatusRequest) (int32, error) {
defer s.m.Unlock()

var status int32
if err := s.db.QueryRow(QUERY_EVENT_STATUS, in.EventTag).Scan(&status); err != nil {
if err := s.db.QueryRow(QueryEventStatus, in.EventTag).Scan(&status); err != nil {
return Error, err
}

Expand All @@ -239,11 +271,34 @@ func (s *store) GetEventStatus(in *pb.GetEventStatusRequest) (int32, error) {
func (s *store) SetEventStatus(in *pb.SetEventStatusRequest) (int32, error) {
s.m.Lock()
defer s.m.Unlock()
_, err := s.db.Exec(UPDATE_EVENT_STATUS, in.EventTag, in.Status)
_, err := s.db.Exec(UpdateEventStatus, in.EventTag, in.Status)
if err != nil {
return Error, err
}
log.Printf("Status updated for event: %s, status: %s \n", in.EventTag, in.Status)

return in.Status, nil
}

//
//func (s *store) GetEventsByStatus () ([]model.Event, error) {
// s.m.Lock()
// defer s.m.Unlock()
//
// rows, err := s.db.Exec(QueryEventsByStatus,)
// if err != nil {
// return nil, err
// }
// var events []model.Event
// for rows.Next() {
// event := new(model.Event)
// err := rows.Scan(&event.Id, &event.Tag, &event.Name, &event.Available, &event.Capacity, &event.Status, &event.Frontends,
// &event.Exercises, &event.StartedAt, &event.ExpectedFinishTime, &event.FinishedAt)
// if err != nil && !strings.Contains(err.Error(), handleNullConversionError) {
// return nil, err
// }
// events = append(events, *event)
// }
//
// return events, nil
//}
Loading

0 comments on commit f1c2e54

Please sign in to comment.