Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ COPY .git .
RUN npm ci

COPY web/ .
RUN npm run build

RUN GIT_DESCRIBE="$(git describe --always --dirty --tags 2>/dev/null || echo unknown)" \
npm run build


# go builder
Expand All @@ -25,6 +27,9 @@ RUN go mod download

COPY . .

RUN go install github.com/swaggo/swag/cmd/swag@latest
RUN swag init --parseDependency

RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /makedotcsh


Expand Down
171 changes: 168 additions & 3 deletions database/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,19 @@ func (database *DatabaseHelper) GetArea(areaID int) (models.Area, error) {
return area, nil
}

func (database *DatabaseHelper) DeleteArea(areaID int) error {
_, err := database.DB.Exec(
"DELETE FROM areas WHERE id = $1",
areaID,
)

if err != nil {
return err
}

return nil
}

func (database *DatabaseHelper) GetAllAreas() ([]models.Area, error) {
rows, err := database.DB.Query("SELECT id, name, description, ldapgroup, photourl FROM areas")
if err != nil {
Expand Down Expand Up @@ -135,7 +148,7 @@ func (database *DatabaseHelper) GetTraining(trainingID int, includeAnswers bool)
var currentQuestion *models.Question
lastQuestionId := 0

query := "SELECT id, title, required_correct, description FROM trainings WHERE id = $1"
query := "SELECT id, title, required_correct, description, show_answers FROM trainings WHERE id = $1"

row := database.DB.QueryRow(query, trainingID)

Expand All @@ -144,6 +157,7 @@ func (database *DatabaseHelper) GetTraining(trainingID int, includeAnswers bool)
&training.Title,
&training.RequiredCorrect,
&training.Description,
&training.ShowAnswers,
)
if err != nil {
return models.Training{}, err
Expand Down Expand Up @@ -233,10 +247,11 @@ func (database *DatabaseHelper) CreateTraining(training models.CreateTrainingReq

var trainingId int
err = tx.QueryRow(
"INSERT INTO trainings (title, required_correct, description) VALUES ($1, $2, $3) RETURNING id",
"INSERT INTO trainings (title, required_correct, description, showAnswers) VALUES ($1, $2, $3, $4) RETURNING id",
training.Title,
training.RequiredCorrect,
training.Description,
training.ShowAnswers,
).Scan(&trainingId)

if err != nil {
Expand Down Expand Up @@ -286,10 +301,11 @@ func (database *DatabaseHelper) UpdateTraining(training models.CreateTrainingReq
defer tx.Rollback()

_, err = tx.Exec(
"UPDATE trainings SET title = $1, required_correct = $2, description = $3 WHERE id = $4",
"UPDATE trainings SET title = $1, required_correct = $2, description = $3, show_answers = $4 WHERE id = $5",
training.Title,
training.RequiredCorrect,
training.Description,
training.ShowAnswers,
trainingId,
)

Expand Down Expand Up @@ -562,3 +578,152 @@ func (database *DatabaseHelper) GetTrainingAnswers(trainingID int) (map[int]stri

return answers, nil
}

func (database *DatabaseHelper) GetResource(rID int) (models.Resource, error) {
row := database.DB.QueryRow("SELECT id, name, description, url FROM resources WHERE id = $1", rID)

var resource models.Resource

err := row.Scan(
&resource.ID,
&resource.Name,
&resource.Description,
&resource.URL,
)

if err != nil {
return models.Resource{}, err
}

return resource, nil
}

func (database *DatabaseHelper) GetAllResources() ([]models.Resource, error) {
rows, err := database.DB.Query("SELECT id, name, description, url FROM resources")
if err != nil {
return []models.Resource{}, nil
}

var resources []models.Resource = []models.Resource{}

for rows.Next() {
var r models.Resource

err := rows.Scan(
&r.ID,
&r.Name,
&r.Description,
&r.URL,
)

if err != nil {
return []models.Resource{}, nil
}

resources = append(resources, r)
}

return resources, nil
}

func (database *DatabaseHelper) GetAreaResources(area int) ([]models.Resource, error) {
rows, err := database.DB.Query("SELECT resource_id FROM area_resources WHERE area_id = $1", area)
if err != nil {
return []models.Resource{}, nil
}

var resources []models.Resource = []models.Resource{}

for rows.Next() {
var resourceID int

err := rows.Scan(
&resourceID,
)

if err != nil {
return []models.Resource{}, err
}

// fetch this training, add to array
resource, err := database.GetResource(resourceID)
if err != nil {
return []models.Resource{}, err
}

resources = append(resources, resource)
}

return resources, nil
}

func (database *DatabaseHelper) CreateResource(r models.Resource) error {
_, err := database.DB.Exec(
"INSERT INTO resources (name, description, url) VALUES ($1, $2, $3)",
r.Name,
r.Description,
r.URL,
)

if err != nil {
return err
}

return nil
}

func (database *DatabaseHelper) UpdateResource(r models.Resource, id int) error {
_, err := database.DB.Exec(
"UPDATE resources SET name = $1, description = $2, url = $3 WHERE id = $4",
r.Name,
r.Description,
r.URL,
id,
)

if err != nil {
return err
}

return nil
}

func (database *DatabaseHelper) DeleteResource(rID int) error {
_, err := database.DB.Exec(
"DELETE FROM resources WHERE id = $1",
rID,
)

if err != nil {
return err
}

return nil
}

func (database *DatabaseHelper) AddResourceToArea(areaID int, resourceIDs []int) error {
for _, resourceID := range resourceIDs {
_, err := database.DB.Exec(
"INSERT INTO area_resources (area_id, resource_id) VALUES ($1, $2)",
areaID, resourceID,
)

if err != nil {
return err
}
}

return nil
}

func (database *DatabaseHelper) RemoveResourceFromArea(areaID int, resourceID int) error {
_, err := database.DB.Exec(
"DELETE FROM area_resources WHERE area_id = $1 AND resource_id = $2",
areaID, resourceID,
)

if err != nil {
return err
}
return nil
}
14 changes: 14 additions & 0 deletions database/migrations/0003_resources.up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
CREATE TABLE resources (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
description TEXT NOT NULL,
url TEXT NOT NULL
);

CREATE TABLE area_resources (
area_id INTEGER NOT NULL,
resource_id INTEGER NOT NULL,
PRIMARY KEY (area_id, resource_id),
FOREIGN KEY (area_id) REFERENCES areas(id) ON DELETE CASCADE,
FOREIGN KEY (resource_id) REFERENCES resources(id) ON DELETE CASCADE
);
1 change: 1 addition & 0 deletions database/migrations/0004_training.up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE trainings ADD show_answers BOOLEAN NOT NULL DEFAULT FALSE;
Loading