messy
This commit is contained in:
parent
51a34008f1
commit
2dd8cc3d2b
31
README.md
31
README.md
|
@ -3,6 +3,10 @@
|
||||||
The goal of this project is to be a crowd sourced resource to find out if a product is vegan
|
The goal of this project is to be a crowd sourced resource to find out if a product is vegan
|
||||||
|
|
||||||
|
|
||||||
|
# Project organization
|
||||||
|
|
||||||
|
- api:
|
||||||
|
|
||||||
## Task list
|
## Task list
|
||||||
- figure out how we want to handle database migrations
|
- figure out how we want to handle database migrations
|
||||||
- database object models should be separated out from database migration function
|
- database object models should be separated out from database migration function
|
||||||
|
@ -16,7 +20,19 @@ The goal of this project is to be a crowd sourced resource to find out if a prod
|
||||||
- moderation tooling?
|
- moderation tooling?
|
||||||
|
|
||||||
|
|
||||||
Troubleshooting:
|
|
||||||
|
## How to start database
|
||||||
|
|
||||||
|
- Run `brew services start postgresql`
|
||||||
|
- Create database
|
||||||
|
- Setting environment variables:
|
||||||
|
- PGHOST=localhost
|
||||||
|
- DB_NAME=veganDB (Can be arbitrary)
|
||||||
|
- Run `createdb veganDB`
|
||||||
|
(To delete in future just run dropdb <name>)
|
||||||
|
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
Error:
|
Error:
|
||||||
`2025/04/17 16:21:21 ERROR: relation "idx_user_claims_product_id" already exists (SQLSTATE 42P07)`
|
`2025/04/17 16:21:21 ERROR: relation "idx_user_claims_product_id" already exists (SQLSTATE 42P07)`
|
||||||
|
@ -29,16 +45,3 @@ Error:
|
||||||
Explanation: Postgres automatically tryes to connect to a database with the same name as the user. Specify user and database:
|
Explanation: Postgres automatically tryes to connect to a database with the same name as the user. Specify user and database:
|
||||||
`psql -U username databaseName `
|
`psql -U username databaseName `
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## How to start database
|
|
||||||
|
|
||||||
- Run `brew services start postgresql`
|
|
||||||
- Create database
|
|
||||||
- Setting environment variables:
|
|
||||||
- PGHOST=localhost
|
|
||||||
- DB_NAME=veganDB (Can be arbitrary)
|
|
||||||
- Run `createdb veganDB`
|
|
||||||
(To delete in future just run dropdb <name>)
|
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import "vegan-barcode/internal/api"
|
||||||
"vegan-barcode/internal/api"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
api.BindRoutes()
|
api.Start()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,72 +1,33 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"vegan-barcode/internal/database"
|
"vegan-barcode/internal/database"
|
||||||
"vegan-barcode/internal/utils"
|
"vegan-barcode/internal/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/labstack/gommon/log"
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
"github.com/vingarcia/ksql"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO Figure out where this should be
|
db := nil
|
||||||
// This exists so that you don't have to individually pass around the logger and database.
|
log := nil
|
||||||
type ApiService struct {
|
|
||||||
db *ksql.DB
|
|
||||||
log *logrus.Logger
|
|
||||||
}
|
|
||||||
|
|
||||||
var s *ApiService
|
func Start() error {
|
||||||
|
|
||||||
// TODO: Service should get moved somewhere else. Not sure on naming.
|
|
||||||
func BindRoutes() {
|
|
||||||
|
|
||||||
s = &ApiService{db: database.InitializeDatabase(), log: utils.InitializeLogger()}
|
|
||||||
// s = &ApiService{db: &ksql.DB{}, log: utils.InitializeLogger()}
|
|
||||||
router := gin.Default()
|
router := gin.Default()
|
||||||
router.GET("/test/:id", s.runTest)
|
|
||||||
router.GET("/", s.runTest)
|
|
||||||
|
|
||||||
// // Search for item info
|
db = database.InitializeDatabase()
|
||||||
// router.GET("/claims/{barcode}", runTest)
|
log = utils.InitializeLogger()
|
||||||
|
|
||||||
// // by user ID or worker
|
|
||||||
// router.DELETE("/claims/{barcode}", deleteClaims)
|
|
||||||
|
|
||||||
// // Update item info
|
|
||||||
// router.GET("/test", runTest)
|
|
||||||
// // Add new item info
|
|
||||||
|
|
||||||
|
s.bindRoutes(router)
|
||||||
router.Run("localhost:8080")
|
router.Run("localhost:8080")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ApiService) runTest(c *gin.Context) {
|
// TODO: Service should get moved somewhere else. Not sure on naming.
|
||||||
queryParam := c.Param("id")
|
func bindRoutes(router *gin.Engine) {
|
||||||
log.Debug("Test was successful.")
|
|
||||||
|
|
||||||
err := s.db.Insert(c, database.ProductsTable, &database.Product{System: "upc", Barcode: "fubar", Created_at: time.Now()})
|
// router.GET("/test", s.runTest)
|
||||||
if err != nil {
|
|
||||||
// TODO: Figure out correct status code.
|
router.Group("/claims")
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"message": "Failed to insert item to product table", "error": err.Error()})
|
{
|
||||||
|
router.GET("/:barcode", handlers.GetClaimsHandler)
|
||||||
|
// router.POST("/:barcode", s.)
|
||||||
}
|
}
|
||||||
c.JSON(http.StatusOK, gin.H{"message": "Hello World!", "query_param": queryParam})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// func claimsByBarcode(c *gin.Context) {
|
|
||||||
// system := c.DefaultQuery("system", "upc")
|
|
||||||
// barcode := c.Query("barcode")
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // deleteClaims will delete
|
|
||||||
// func deleteClaims(c *gin.Context) {
|
|
||||||
// userID := c.Param("user")
|
|
||||||
// workerID := c.Param("worker")
|
|
||||||
// // TODO query database
|
|
||||||
// database.DB.Query()
|
|
||||||
// c.JSON(http.StatusOK, gin.H{"message": "Hello World!"})
|
|
||||||
// }
|
|
||||||
|
|
11
internal/database/claims_dao.go
Normal file
11
internal/database/claims_dao.go
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
package database
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
func FindClaimsByBarcode(system string, barcode string) {
|
||||||
|
ctx := context.Background()
|
||||||
|
api.db.Exec("SELECT * FROM user_claims")
|
||||||
|
|
||||||
|
}
|
|
@ -36,7 +36,6 @@ func InitializeDatabase() *ksql.DB {
|
||||||
|
|
||||||
// createTables adds the product, automated_claims, and user_claims tables to the initialized database.
|
// createTables adds the product, automated_claims, and user_claims tables to the initialized database.
|
||||||
func createTables(ctx context.Context, db ksql.DB) {
|
func createTables(ctx context.Context, db ksql.DB) {
|
||||||
|
|
||||||
_, err := db.Exec(ctx, `
|
_, err := db.Exec(ctx, `
|
||||||
CREATE TABLE IF NOT EXISTS products (
|
CREATE TABLE IF NOT EXISTS products (
|
||||||
id BIGSERIAL PRIMARY KEY,
|
id BIGSERIAL PRIMARY KEY,
|
||||||
|
|
24
internal/handlers/claims_handler.go
Normal file
24
internal/handlers/claims_handler.go
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/labstack/gommon/log"
|
||||||
|
|
||||||
|
"vegan-barcode/internal/services"
|
||||||
|
)
|
||||||
|
|
||||||
|
func runTest(c *gin.Context) {
|
||||||
|
queryParam := c.Param("id")
|
||||||
|
log.Debug("Test was successful.")
|
||||||
|
c.JSON(http.StatusOK, gin.H{"message": "Hello World!", "query_param": queryParam})
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetClaimsHandler(c *gin.Context) {
|
||||||
|
system := c.DefaultQuery("system", "upc")
|
||||||
|
barcode := c.Query("barcode")
|
||||||
|
|
||||||
|
claims := services.GetClaims(system, barcode)
|
||||||
|
// TODO: 404 when claims are not found
|
||||||
|
}
|
9
internal/services/claims_service.go
Normal file
9
internal/services/claims_service.go
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
package services
|
||||||
|
|
||||||
|
import (
|
||||||
|
"vegan-barcode/internal/database"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetClaims(system string, barcode string) {
|
||||||
|
database.FindClaimsByBarcode(system, barcode)
|
||||||
|
}
|
|
@ -1 +0,0 @@
|
||||||
package services
|
|
15
internal/utils/io.go
Normal file
15
internal/utils/io.go
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
"github.com/vingarcia/ksql"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TODO Figure out where this should be
|
||||||
|
// This exists so that you don't have to individually pass around the logger and database.
|
||||||
|
type ApiService struct {
|
||||||
|
db *ksql.DB
|
||||||
|
log *logrus.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
var s *ApiService
|
Loading…
Reference in a new issue