This repository has been archived on 2025-03-01. You can view files and clone it, but cannot push or open issues or pull requests.
trantor/lib/database/submissions.go

128 lines
3.1 KiB
Go
Raw Permalink Normal View History

package database
2019-03-05 20:52:07 +00:00
import (
"fmt"
"time"
"github.com/prometheus/common/log"
)
const (
daysExpireSubmission = 30
)
type Submission struct {
2019-11-06 06:53:41 +00:00
ID int `pg:"type:serial"`
SubmissionID string `pg:"type:varchar(16)"`
Filename string
Status string
2018-04-07 23:42:41 +00:00
Comment string
2019-03-05 20:52:07 +00:00
LastModified time.Time
2020-11-30 19:03:31 +00:00
UserID int `pg:"type:integer,unique"`
User *User `pg:"rel:has-one"`
2019-11-06 06:53:41 +00:00
BookID string `pg:"type:varchar(16),unique"`
2020-11-30 19:03:31 +00:00
Book *Book `pg:"rel:has-one"`
}
func (db *pgDB) AddSubmission(submission Submission, userName string) (id int, err error) {
if userName != "" {
user, err := db.getUser(userName)
if err == nil {
submission.UserID = user.ID
}
}
2019-03-05 20:52:07 +00:00
submission.LastModified = time.Now()
2020-11-30 19:03:31 +00:00
_, err = db.sql.Model(&submission).Insert()
return submission.ID, err
}
func (db *pgDB) UpdateSubmission(id int, status string, book *Book) error {
_, err := db.sql.Model(&Submission{}).
Set("status = ?", status).
Set("book_id = ?", extractID(book)).
2019-03-05 20:52:07 +00:00
Set("last_modified = CURRENT_TIMESTAMP").
Where("id = ?", id).
Update()
return err
}
func (db *pgDB) UpdateSubmissionByBook(bookID string, status string, book *Book) error {
_, err := db.sql.Model(&Submission{}).
Set("status = ?", status).
Set("book_id = ?", extractID(book)).
2019-03-05 20:52:07 +00:00
Set("last_modified = CURRENT_TIMESTAMP").
Where("book_id = ?", bookID).
Update()
return err
}
2018-04-07 23:42:41 +00:00
func (db *pgDB) UpdateSubmissionComment(submissionID, bookID, comment string) error {
_, err := db.sql.Model(&Submission{}).
Set("comment = ?", comment).
Where("submission_id = ?", submissionID).
Where("book_id = ?", bookID).
Update()
return err
}
func (db *pgDB) GetComment(bookID string) (string, error) {
var submission Submission
err := db.sql.Model(&submission).
Where("book_id = ?", bookID).
Select()
if err != nil {
return "", err
}
return submission.Comment, nil
}
func (db *pgDB) GetSubmission(submissionID string) (submission []Submission, err error) {
err = db.sql.Model(&submission).
2019-11-06 06:53:41 +00:00
Relation("Book").
Where("submission_id = ?", submissionID).
Select()
return
}
func (db *pgDB) GetUserSubmissions(userName string) (submission []Submission, err error) {
err = db.sql.Model(&submission).
2019-11-06 06:53:41 +00:00
Relation("Book").
Relation("User").
Where("username = ?", userName).
2019-03-05 20:52:07 +00:00
Order("last_modified DESC").
Select()
return
}
2019-03-05 20:52:07 +00:00
func (db *pgDB) submissionsCleaner() {
periodicity := 60 * time.Minute
for true {
time.Sleep(periodicity)
_, err := db.sql.Model(&Submission{}).
Where("book_id is null").
2019-03-05 20:52:07 +00:00
Where("last_modified < CURRENT_TIMESTAMP - interval ?", fmt.Sprintf("%d days", daysExpireSubmission)).
Delete()
if err != nil {
log.Error("Error deleting null submissions: ", err)
}
_, err = db.sql.Model(&Submission{}).
TableExpr(`books`).
Where("book_id = books.id").
Where("books.active is true").
Where("last_modified < CURRENT_TIMESTAMP - interval ?", fmt.Sprintf("%d days", daysExpireSubmission)).
Delete()
if err != nil {
log.Error("Error deleting approved submissions: ", err)
2019-03-05 20:52:07 +00:00
}
}
}
func extractID(book *Book) interface{} {
if book == nil {
return nil
}
return book.ID
}