feat: move language storage to array from postgres
This commit is contained in:
parent
a8ba5677d3
commit
02a7a49ac3
4 changed files with 23 additions and 93 deletions
|
@ -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"}},
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue