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"
"os"
"path/filepath"
"time"
"github.com/jmoiron/sqlx"
_ "github.com/mattn/go-sqlite3"
@ -15,12 +16,16 @@ type Database interface {
AddUser(username string, password string) error
RemoveUser(username string) error
PromoteToAdmin(username string) error
PromoteToAdmin(username string) error
GetUserId(username string) (int, error)
AddProject(name string, description string, username string) error
Migrate(dirname 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
// 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
@ -39,6 +44,10 @@ const promoteToAdmin = "INSERT INTO site_admin (admin_id) SELECT id FROM users W
// const addTimeReport = ""
// const addUserToProject = ""
// 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
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
func (d *Db) AddUser(username string, password string) error {
_, err := d.Exec(userInsert, username, password)
@ -86,9 +121,20 @@ func (d *Db) PromoteToAdmin(username string) error {
return err
}
func (d *Db) PromoteToAdmin(username string) error {
_, err := d.Exec(promoteToAdmin, username)
return err
}
func (d *Db) GetUserId(username string) (int, error) {
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
}

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=