Compare commits
No commits in common. "766b44f353501f360910d7ef6862c487feb7058b" and "92d03d342bcc611d6803335352189df9c7852171" have entirely different histories.
766b44f353
...
92d03d342b
@ -1,24 +0,0 @@
|
|||||||
name: Backend Build and Test
|
|
||||||
on: [push]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: standard-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Go
|
|
||||||
uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: '>=1.24'
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cd backend
|
|
||||||
go build .
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: |
|
|
||||||
cd backend
|
|
||||||
go test . -v
|
|
@ -1,27 +0,0 @@
|
|||||||
name: Backend Deploy
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: standard-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Login
|
|
||||||
with:
|
|
||||||
package_rw: ${{ secrets.PACKAGE_RW }}
|
|
||||||
run: docker login gitea.seeseepuff.be -u seeseemelk -p ${{ secrets.PACKAGE_RW }}
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cd backend
|
|
||||||
docker build -t gitea.seeseepuff.be/seeseemelk/allowance-planner:$(git rev-parse --short HEAD) .
|
|
||||||
|
|
||||||
- name: Push
|
|
||||||
run: |
|
|
||||||
cd backend
|
|
||||||
docker push gitea.seeseepuff.be/seeseemelk/allowance-planner:$(git rev-parse --short HEAD)
|
|
@ -1,14 +0,0 @@
|
|||||||
FROM golang:1.24.2-alpine3.21
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
COPY go.mod go.sum ./
|
|
||||||
RUN go mod download
|
|
||||||
|
|
||||||
COPY migrations ./migrations/
|
|
||||||
COPY *.go ./
|
|
||||||
COPY *.gohtml ./
|
|
||||||
RUN go build -o /allowance_planner
|
|
||||||
|
|
||||||
EXPOSE 8080
|
|
||||||
ENV GIN_MODE=release
|
|
||||||
CMD ["/allowance_planner"]
|
|
@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
TestHistoryName = "Test History"
|
TestAllowanceName = "Test History"
|
||||||
)
|
)
|
||||||
|
|
||||||
func startServer(t *testing.T) *httpexpect.Expect {
|
func startServer(t *testing.T) *httpexpect.Expect {
|
||||||
@ -62,7 +62,7 @@ func TestGetUserAllowance(t *testing.T) {
|
|||||||
|
|
||||||
// Create a new allowance
|
// Create a new allowance
|
||||||
requestBody := map[string]interface{}{
|
requestBody := map[string]interface{}{
|
||||||
"name": TestHistoryName,
|
"name": TestAllowanceName,
|
||||||
"target": 5000,
|
"target": 5000,
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ func TestGetUserAllowance(t *testing.T) {
|
|||||||
result.Length().IsEqual(2)
|
result.Length().IsEqual(2)
|
||||||
item := result.Value(1).Object()
|
item := result.Value(1).Object()
|
||||||
item.Value("id").IsEqual(1)
|
item.Value("id").IsEqual(1)
|
||||||
item.Value("name").IsEqual(TestHistoryName)
|
item.Value("name").IsEqual(TestAllowanceName)
|
||||||
item.Value("target").IsEqual(5000)
|
item.Value("target").IsEqual(5000)
|
||||||
item.Value("weight").IsEqual(10)
|
item.Value("weight").IsEqual(10)
|
||||||
item.Value("progress").IsEqual(0)
|
item.Value("progress").IsEqual(0)
|
||||||
@ -95,7 +95,7 @@ func TestCreateUserAllowance(t *testing.T) {
|
|||||||
|
|
||||||
// Create a new allowance
|
// Create a new allowance
|
||||||
requestBody := map[string]interface{}{
|
requestBody := map[string]interface{}{
|
||||||
"name": TestHistoryName,
|
"name": TestAllowanceName,
|
||||||
"target": 5000,
|
"target": 5000,
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
}
|
}
|
||||||
@ -120,7 +120,7 @@ func TestCreateUserAllowance(t *testing.T) {
|
|||||||
|
|
||||||
allowance := allowances.Value(1).Object()
|
allowance := allowances.Value(1).Object()
|
||||||
allowance.Value("id").IsEqual(allowanceId)
|
allowance.Value("id").IsEqual(allowanceId)
|
||||||
allowance.Value("name").IsEqual(TestHistoryName)
|
allowance.Value("name").IsEqual(TestAllowanceName)
|
||||||
allowance.Value("target").IsEqual(5000)
|
allowance.Value("target").IsEqual(5000)
|
||||||
allowance.Value("weight").IsEqual(10)
|
allowance.Value("weight").IsEqual(10)
|
||||||
allowance.Value("progress").IsEqual(0)
|
allowance.Value("progress").IsEqual(0)
|
||||||
@ -130,7 +130,7 @@ func TestCreateUserAllowanceNoUser(t *testing.T) {
|
|||||||
e := startServer(t)
|
e := startServer(t)
|
||||||
|
|
||||||
requestBody := map[string]interface{}{
|
requestBody := map[string]interface{}{
|
||||||
"name": TestHistoryName,
|
"name": TestAllowanceName,
|
||||||
"target": 5000,
|
"target": 5000,
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
}
|
}
|
||||||
@ -171,7 +171,7 @@ func TestCreateUserAllowanceBadId(t *testing.T) {
|
|||||||
e := startServer(t)
|
e := startServer(t)
|
||||||
|
|
||||||
requestBody := map[string]interface{}{
|
requestBody := map[string]interface{}{
|
||||||
"name": TestHistoryName,
|
"name": TestAllowanceName,
|
||||||
"target": 5000,
|
"target": 5000,
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
}
|
}
|
||||||
@ -187,7 +187,7 @@ func TestDeleteUserAllowance(t *testing.T) {
|
|||||||
|
|
||||||
// Create a new allowance to delete
|
// Create a new allowance to delete
|
||||||
createRequest := map[string]interface{}{
|
createRequest := map[string]interface{}{
|
||||||
"name": TestHistoryName,
|
"name": TestAllowanceName,
|
||||||
"target": 1000,
|
"target": 1000,
|
||||||
"weight": 5,
|
"weight": 5,
|
||||||
}
|
}
|
||||||
@ -434,7 +434,7 @@ func TestPutTaskInvalidTaskId(t *testing.T) {
|
|||||||
e.PUT("/task/999").WithJSON(requestBody).Expect().Status(404)
|
e.PUT("/task/999").WithJSON(requestBody).Expect().Status(404)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostHistory(t *testing.T) {
|
func TestPostAllowance(t *testing.T) {
|
||||||
e := startServer(t)
|
e := startServer(t)
|
||||||
|
|
||||||
e.POST("/user/1/history").WithJSON(PostHistory{Allowance: 100}).Expect().Status(200)
|
e.POST("/user/1/history").WithJSON(PostHistory{Allowance: 100}).Expect().Status(200)
|
||||||
@ -445,7 +445,7 @@ func TestPostHistory(t *testing.T) {
|
|||||||
response.Value("allowance").Number().IsEqual(100 + 20 - 10)
|
response.Value("allowance").Number().IsEqual(100 + 20 - 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostHistoryInvalidUserId(t *testing.T) {
|
func TestPostAllowanceInvalidUserId(t *testing.T) {
|
||||||
e := startServer(t)
|
e := startServer(t)
|
||||||
|
|
||||||
e.POST("/user/999/history").WithJSON(PostHistory{Allowance: 100}).Expect().
|
e.POST("/user/999/history").WithJSON(PostHistory{Allowance: 100}).Expect().
|
||||||
@ -472,10 +472,9 @@ func TestGetUserAllowanceById(t *testing.T) {
|
|||||||
|
|
||||||
// Create a new allowance
|
// Create a new allowance
|
||||||
requestBody := map[string]interface{}{
|
requestBody := map[string]interface{}{
|
||||||
"name": TestHistoryName,
|
"name": TestAllowanceName,
|
||||||
"target": 5000,
|
"target": 5000,
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
"colour": "#FF5733",
|
|
||||||
}
|
}
|
||||||
resp := e.POST("/user/1/allowance").WithJSON(requestBody).Expect().Status(201).JSON().Object()
|
resp := e.POST("/user/1/allowance").WithJSON(requestBody).Expect().Status(201).JSON().Object()
|
||||||
allowanceId := int(resp.Value("id").Number().Raw())
|
allowanceId := int(resp.Value("id").Number().Raw())
|
||||||
@ -483,21 +482,10 @@ func TestGetUserAllowanceById(t *testing.T) {
|
|||||||
// Retrieve the created allowance by ID
|
// Retrieve the created allowance by ID
|
||||||
result := e.GET("/user/1/allowance/" + strconv.Itoa(allowanceId)).Expect().Status(200).JSON().Object()
|
result := e.GET("/user/1/allowance/" + strconv.Itoa(allowanceId)).Expect().Status(200).JSON().Object()
|
||||||
result.Value("id").IsEqual(allowanceId)
|
result.Value("id").IsEqual(allowanceId)
|
||||||
result.Value("name").IsEqual(TestHistoryName)
|
result.Value("name").IsEqual(TestAllowanceName)
|
||||||
result.Value("target").IsEqual(5000)
|
result.Value("target").IsEqual(5000)
|
||||||
result.Value("weight").IsEqual(10)
|
result.Value("weight").IsEqual(10)
|
||||||
result.Value("progress").IsEqual(0)
|
result.Value("progress").IsEqual(0)
|
||||||
result.Value("colour").IsEqual("#FF5733")
|
|
||||||
|
|
||||||
resultArray := e.GET("/user/1/allowance").Expect().Status(200).JSON().Array()
|
|
||||||
resultArray.Length().IsEqual(2)
|
|
||||||
result = resultArray.Value(1).Object()
|
|
||||||
result.Value("id").IsEqual(allowanceId)
|
|
||||||
result.Value("name").IsEqual(TestHistoryName)
|
|
||||||
result.Value("target").IsEqual(5000)
|
|
||||||
result.Value("weight").IsEqual(10)
|
|
||||||
result.Value("progress").IsEqual(0)
|
|
||||||
result.Value("colour").IsEqual("#FF5733")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetUserByAllowanceIdInvalidAllowance(t *testing.T) {
|
func TestGetUserByAllowanceIdInvalidAllowance(t *testing.T) {
|
||||||
@ -525,7 +513,7 @@ func TestPutAllowanceById(t *testing.T) {
|
|||||||
|
|
||||||
// Create a new allowance
|
// Create a new allowance
|
||||||
requestBody := map[string]interface{}{
|
requestBody := map[string]interface{}{
|
||||||
"name": TestHistoryName,
|
"name": TestAllowanceName,
|
||||||
"target": 5000,
|
"target": 5000,
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
"colour": "#FF5733",
|
"colour": "#FF5733",
|
||||||
|
@ -28,7 +28,3 @@ func ConvertStringToColour(colourStr string) (int, error) {
|
|||||||
}
|
}
|
||||||
return colour, nil
|
return colour, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ConvertColourToString(colour int) string {
|
|
||||||
return fmt.Sprintf("#%06X", colour)
|
|
||||||
}
|
|
||||||
|
@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"time"
|
"time"
|
||||||
@ -83,14 +84,13 @@ func (db *Db) GetUserAllowances(userId int) ([]Allowance, error) {
|
|||||||
totalAllowance.Progress = float64(progress) / 100.0
|
totalAllowance.Progress = float64(progress) / 100.0
|
||||||
allowances = append(allowances, totalAllowance)
|
allowances = append(allowances, totalAllowance)
|
||||||
|
|
||||||
for row := range db.db.Query("select id, name, target, balance, weight, colour from allowances where user_id = ?").
|
for row := range db.db.Query("select id, name, target, balance, weight from allowances where user_id = ?").
|
||||||
Bind(userId).Range(&err) {
|
Bind(userId).Range(&err) {
|
||||||
allowance := Allowance{}
|
allowance := Allowance{}
|
||||||
var target, progress, colour int
|
var target, progress int
|
||||||
err = row.Scan(&allowance.ID, &allowance.Name, &target, &progress, &allowance.Weight, &colour)
|
err = row.Scan(&allowance.ID, &allowance.Name, &target, &progress, &allowance.Weight)
|
||||||
allowance.Target = float64(target) / 100.0
|
allowance.Target = float64(target) / 100.0
|
||||||
allowance.Progress = float64(progress) / 100.0
|
allowance.Progress = float64(progress) / 100.0
|
||||||
allowance.Colour = ConvertColourToString(colour)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -113,14 +113,13 @@ func (db *Db) GetUserAllowanceById(userId int, allowanceId int) (*Allowance, err
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var target, progress int64
|
var target, progress, colour int64
|
||||||
var colour int
|
|
||||||
err := db.db.Query("select id, name, target, balance, weight, colour from allowances where user_id = ? and id = ?").
|
err := db.db.Query("select id, name, target, balance, weight, colour from allowances where user_id = ? and id = ?").
|
||||||
Bind(userId, allowanceId).
|
Bind(userId, allowanceId).
|
||||||
ScanSingle(&allowance.ID, &allowance.Name, &target, &progress, &allowance.Weight, &colour)
|
ScanSingle(&allowance.ID, &allowance.Name, &target, &progress, &allowance.Weight, &colour)
|
||||||
allowance.Target = float64(target) / 100.0
|
allowance.Target = float64(target) / 100.0
|
||||||
allowance.Progress = float64(progress) / 100.0
|
allowance.Progress = float64(progress) / 100.0
|
||||||
allowance.Colour = ConvertColourToString(colour)
|
allowance.Colour = fmt.Sprintf("#%06X", colour)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
alter table allowances
|
alter table allowances
|
||||||
add column colour integer;
|
add column colour integer not null;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user