Merge branch 'borean-dev' into dev

This commit is contained in:
borean 2024-03-08 14:55:10 +01:00
commit 0b23c5f8f1
4 changed files with 210 additions and 1 deletions

View file

@ -5,6 +5,7 @@ import (
"log" "log"
"os" "os"
"path/filepath" "path/filepath"
"time"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
@ -15,12 +16,16 @@ type Database interface {
AddUser(username string, password string) error AddUser(username string, password string) error
RemoveUser(username string) error RemoveUser(username string) error
PromoteToAdmin(username string) error PromoteToAdmin(username string) error
PromoteToAdmin(username string) error
GetUserId(username string) (int, error) GetUserId(username string) (int, error)
AddProject(name string, description string, username string) error AddProject(name string, description string, username string) error
Migrate(dirname string) error Migrate(dirname string) error
// AddTimeReport(projectname string, start time.Time, end time.Time) error // AddTimeReport(projectname string, start time.Time, end time.Time) error
// AddUserToProject(username string, projectname string) error // AddUserToProject(username string, projectname string) error
// ChangeUserRole(username string, projectname string, role string) error // ChangeUserRole(username string, projectname string, role string) error
// AddTimeReport(projectname string, start time.Time, end time.Time) error
// AddUserToProject(username string, projectname string) error
// ChangeUserRole(username string, projectname string, role string) error
} }
// This struct is a wrapper type that holds the database connection // This struct is a wrapper type that holds the database connection
@ -39,6 +44,10 @@ const promoteToAdmin = "INSERT INTO site_admin (admin_id) SELECT id FROM users W
// const addTimeReport = "" // const addTimeReport = ""
// const addUserToProject = "" // const addUserToProject = ""
// const changeUserRole = "" // const changeUserRole = ""
const promoteToAdmin = "INSERT INTO site_admin (admin_id) SELECT id FROM users WHERE username = ?"
const addTimeReport = "INSERT INTO activity (report_id, activity_nbr, start_time, end_time, break, comment) VALUES (?, ?, ?, ?, ?, ?)" // WIP
const addUserToProject = "INSERT INTO project_member (project_id, user_id, role) VALUES (?, ?, ?)" // WIP
// const changeUserRole = ""
// DbConnect connects to the database // DbConnect connects to the database
func DbConnect(dbpath string) Database { func DbConnect(dbpath string) Database {
@ -69,6 +78,32 @@ func DbConnect(dbpath string) Database {
// } // }
func (d *Db) AddTimeReport(projectname string, start time.Time, end time.Time, breakTime uint32) error { // WIP
_, err := d.Exec(addTimeReport, projectname, 0, start, end, breakTime, false)
return err
}
func (d *Db) AddUserToProject(username string, projectname string, role string) error { // WIP
var userid int
userid, err := d.GetUserId(username)
if err != nil {
panic(err)
}
var projectid int
projectid, err2 := d.GetProjectId(projectname)
if err2 != nil {
panic(err2)
}
_, err3 := d.Exec(addUserToProject, projectid, userid, role)
return err3
}
// func (d *Db) ChangeUserRole(username string, projectname string, role string) error {
// }
// AddUser adds a user to the database // AddUser adds a user to the database
func (d *Db) AddUser(username string, password string) error { func (d *Db) AddUser(username string, password string) error {
_, err := d.Exec(userInsert, username, password) _, err := d.Exec(userInsert, username, password)
@ -86,9 +121,20 @@ func (d *Db) PromoteToAdmin(username string) error {
return err return err
} }
func (d *Db) PromoteToAdmin(username string) error {
_, err := d.Exec(promoteToAdmin, username)
return err
}
func (d *Db) GetUserId(username string) (int, error) { func (d *Db) GetUserId(username string) (int, error) {
var id int var id int
err := d.Get(&id, "SELECT id FROM users WHERE username = ?", username) err := d.Get(&id, "SELECT id FROM users WHERE username = ?", username) // Borde det inte vara "user" i singular
return id, err
}
func (d *Db) GetProjectId(projectname string) (int, error) { // WIP, denna kan vara goof
var id int
err := d.Get(&id, "SELECT id FROM project WHERE project_name = ?", projectname)
return id, err return id, err
} }

View file

@ -0,0 +1,19 @@
package model
type TimeReport struct {
reportId string
projectName string
userName string
userRole string
reportDate string
timeWorked uint64
isSigned bool
reportStatus string // Example "draft", "signed", "unsigned"
}
type Project struct {
timeReports []TimeReport
projectName string
projectmembers map[string]User
projectRoles map[string]User
}

View file

@ -0,0 +1,139 @@
package model
import (
"errors"
)
type Account struct {
fullName string
userName string
}
type Administrator struct {
projects map[string]Project
Account
ProjectMember // comp
}
// Administrator reciever functions
func (administrator Administrator) addUser(project *Project, user *User) error {
// WIP
return errors.New("WIP")
}
func (administrator Administrator) removerUser(project *Project, user *User) error {
// WIP
return errors.New("WIP")
}
func (administrator Administrator) deleteProject(project *Project) error {
// WIP
return errors.New("WIP")
}
func (administrator Administrator) changeUserRole(project *Project, user *User) error {
// WIP
return errors.New("WIP")
}
func (administrator *Administrator) login() error {
// WIP
return errors.New("WIP")
}
func (administrator *Administrator) logout() error {
// WIP
return errors.New("WIP")
}
type ProjectManager struct {
managedProjects map[string]Project // projekt som förvaltas av projektledaren
totalTime uint64 // total totalt tid arbetat av projektledaren
Account
ProjectMember // comp
}
// ProjectManager reciever functions
func (projectManager ProjectManager) signReport(timeReport *TimeReport, user User) error {
// WIP
return errors.New("WIP")
}
func (projectManager ProjectManager) unsignReport(timeReport *TimeReport, user User) error {
// WIP
return errors.New("WIP")
}
func (projectManager ProjectManager) getAllReports(project *Project) ([]TimeReport, error) {
// WIP
return project.timeReports, errors.New("WIP")
}
func (projectManager ProjectManager) assignRole(user *User, project *Project, newRole string) error {
// WIP
return errors.New("WIP")
}
func (projectManager ProjectManager) removeMember(project *Project, user *User) error {
// WIP
return errors.New("WIP")
}
func (projectManager ProjectManager) getTotalTime(project *Project) (uint64, error) {
// WIP
return 0, errors.New("WIP")
}
func (projectManager *ProjectManager) login() error {
// WIP
return errors.New("WIP")
}
func (projectManager *ProjectManager) logout() error {
// WIP
return errors.New("WIP")
}
type ProjectMember struct {
timereports []TimeReport
role string // ?????
Account // comp
}
// User reciever functions
// function used to create a time report, returning a *TimeReport is questionable
func (ProjectMember *ProjectMember) createTimeReport(Project *Project) (*TimeReport, error) {
// WIP
return &TimeReport{}, errors.New("WIP")
}
func (ProjectMember ProjectMember) getTimeReport(timereports *[]TimeReport) (*TimeReport, error) {
// WIP
return &TimeReport{}, errors.New("WIP")
}
func (ProjectMember *ProjectMember) editTimeReport(timereport *TimeReport) {
// timereport.editReport()
// WIP
}
func (projectUser ProjectMember) deleteTimeReport(timeReport *TimeReport) error { // Ska bara project manager kunna göra detta? fråga ledarna!
// WIP
return errors.New("WIP")
}
func (projectUser *ProjectMember) login() error {
// WIP
return errors.New("WIP")
}
func (projectUser *ProjectMember) logout() error {
// WIP
return errors.New("WIP")
}
type User interface {
login()
logout()
}

5
go.work.sum Normal file
View file

@ -0,0 +1,5 @@
github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0=
github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=