diff --git a/internal/models/language.go b/internal/models/language.go index d7105da..d3f000a 100644 --- a/internal/models/language.go +++ b/internal/models/language.go @@ -1,12 +1,13 @@ package models -import "time" - type Language struct { - Id *int32 `db:"id"` - Name *string `db:"name"` - BuildFileHash *string `db:"build_file_hash"` - ExecuteFileHash *string `db:"execute_file_hash"` - CreatedAt *time.Time `db:"created_at"` - UpdatedAt *time.Time `db:"updated_at"` + Name string + CompileCmd []string //source: src;result:executable + RunCmd []string //source: executable +} + +var languages = [...]Language { + {Name : "gcc std=c90", + CompileCmd : []string{"gcc", "src","-std=c90","-o","executable"}, + RunCmd : []string{"executable"}}, } diff --git a/internal/services/language.go b/internal/services/language.go index c9d9d2e..dd83807 100644 --- a/internal/services/language.go +++ b/internal/services/language.go @@ -6,10 +6,7 @@ import ( ) type LanguageStorage interface { - CreateLanguage(ctx context.Context, language *models.Language) (int32, error) ReadLanguageById(ctx context.Context, id int32) (*models.Language, error) - UpdateLanguage(ctx context.Context, language *models.Language) error - DeleteLanguage(ctx context.Context, id int32) error } type LanguageService struct { @@ -24,26 +21,8 @@ func NewLanguageService( } } -func (service *LanguageService) CreateLanguage(ctx context.Context, language *models.Language) (int32, error) { - //userId := ctx.Value("user_id").(int32) - panic("access control is not implemented yet") - return service.languageStorage.CreateLanguage(ctx, language) -} - func (service *LanguageService) ReadLanguageById(ctx context.Context, id int32) (*models.Language, error) { //userId := ctx.Value("user_id").(int32) panic("access control is not implemented yet") return service.languageStorage.ReadLanguageById(ctx, id) } - -func (service *LanguageService) UpdateLanguage(ctx context.Context, language *models.Language) error { - //userId := ctx.Value("user_id").(int32) - panic("access control is not implemented yet") - return service.languageStorage.UpdateLanguage(ctx, language) -} - -func (service *LanguageService) DeleteLanguage(ctx context.Context, id int32) error { - //userId := ctx.Value("user_id").(int32) - panic("access control is not implemented yet") - return service.languageStorage.DeleteLanguage(ctx, id) -} diff --git a/internal/storage/language.go b/internal/storage/language.go index 51fec57..2b4df77 100644 --- a/internal/storage/language.go +++ b/internal/storage/language.go @@ -19,36 +19,6 @@ func NewLanguageStorage(db *sqlx.DB, logger *zap.Logger) *LanguageStorage { } } -func (storage *LanguageStorage) CreateLanguage(ctx context.Context, language *models.Language) (int32, error) { - query := storage.db.Rebind(` -INSERT INTO languages - (name,build_file_hash,execute_file_hash) -VALUES (?, ?, ?) -RETURNING id -`) - - rows, err := storage.db.QueryxContext( - ctx, - query, - language.Name, - "", //FIXME - "", - ) - if err != nil { - return 0, handlePgErr(err) - } - - defer rows.Close() - var id int32 - err = rows.StructScan(&id) - if err != nil { - return 0, handlePgErr(err) - } - - return id, nil - -} - func (storage *LanguageStorage) ReadLanguageById(ctx context.Context, id int32) (*models.Language, error) { var language models.Language query := storage.db.Rebind("SELECT * from languages WHERE id=? LIMIT 1") @@ -58,23 +28,3 @@ func (storage *LanguageStorage) ReadLanguageById(ctx context.Context, id int32) } return &language, nil } - -func (storage *LanguageStorage) UpdateLanguage(ctx context.Context, id int32, language models.Language) error { - query := storage.db.Rebind("UPDATE languages SET name=?") //FIXME add build file and execute file loading - _, err := storage.db.ExecContext(ctx, query, language.Name) - if err != nil { - return handlePgErr(err) - } - - return nil -} - -func (storage *LanguageStorage) DeleteLanguage(ctx context.Context, id int32) error { - query := storage.db.Rebind("DELETE FROM languages WHERE id=?") - _, err := storage.db.ExecContext(ctx, query, id) - if err != nil { - return handlePgErr(err) - } - - return nil -} diff --git a/migrations/20240727123308_initial.sql b/migrations/20240727123308_initial.sql index 069a39a..0178f81 100644 --- a/migrations/20240727123308_initial.sql +++ b/migrations/20240727123308_initial.sql @@ -1,16 +1,16 @@ -- +goose Up -- +goose StatementBegin -CREATE TABLE IF NOT EXISTS languages -( - id serial NOT NULL, - name VARCHAR(60) NOT NULL, - build_file_hash CHAR(128) NULL, - execute_file_hash CHAR(128) NULL, - created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), - updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), - - PRIMARY KEY (id) -); +--CREATE TABLE IF NOT EXISTS languages +--( +-- id serial NOT NULL, +-- name VARCHAR(60) NOT NULL, +-- build_file_hash CHAR(128) NULL, +-- execute_file_hash CHAR(128) NULL, +-- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), +-- updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), +-- +-- PRIMARY KEY (id) +--); @@ -123,7 +123,7 @@ CREATE TABLE IF NOT EXISTS solutions id serial NOT NULL, participant_id INT REFERENCES participants ON DELETE CASCADE, task_id INT REFERENCES problems ON DELETE CASCADE, - language_id INT REFERENCES languages ON DELETE CASCADE, + language_id INT NOT NULL,REFERENCES languages ON DELETE CASCADE, solution_hash CHAR(128) NOT NULL, result INT NOT NULL, score INT NOT NULL, @@ -285,7 +285,7 @@ END; $$; -CREATE TRIGGER languages_upd_trg BEFORE UPDATE ON languages FOR EACH ROW EXECUTE FUNCTION updated_at_update(); +--CREATE TRIGGER languages_upd_trg BEFORE UPDATE ON languages FOR EACH ROW EXECUTE FUNCTION updated_at_update(); CREATE TRIGGER problems_upd_trg BEFORE UPDATE ON problems FOR EACH ROW EXECUTE FUNCTION updated_at_update(); CREATE TRIGGER contests_upd_trg BEFORE UPDATE ON contests FOR EACH ROW EXECUTE FUNCTION updated_at_update(); CREATE TRIGGER users_upd_trg BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION updated_at_update(); @@ -301,7 +301,7 @@ DROP FUNCTION IF EXISTS on_new_solution CASCADE; DROP FUNCTION IF EXISTS on_new_subtaskrun CASCADE; DROP TABLE IF EXISTS tests CASCADE; DROP TABLE IF EXISTS solutions CASCADE; -DROP TABLE IF EXISTS languages CASCADE; +--DROP TABLE IF EXISTS languages CASCADE; DROP TABLE IF EXISTS testgroups CASCADE; DROP TABLE IF EXISTS testruns CASCADE; DROP TABLE IF EXISTS subtaskruns CASCADE;