Skip to content

Commit

Permalink
6/add equipment to member (#21)
Browse files Browse the repository at this point in the history
* Refactor into models folder

* Store and fetch equipment for members

* Add jacket to a member

* Change all equipment

* Add icons for equipment

* Update readme

* filter by Group

* add search

* Helmet and gloves for mini group

* Fix member creation

* Fix some issues

* Style equipment

* Load groups after login

* Interacitve frontend

* Fix warnings and rename types

Co-authored-by: Arne Maier <arne.maier@inovex.de>
  • Loading branch information
KordonDev and Arne Maier authored Jan 5, 2023
1 parent 6024542 commit 4205ed7
Show file tree
Hide file tree
Showing 34 changed files with 774 additions and 221 deletions.
11 changes: 10 additions & 1 deletion Readme.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Equipment watchdog

It should track the equipment of members. This includes moving equipment from one member to another but also requesting new equipment.ü
It should track the equipment of members. This includes moving equipment from one member to another but also requesting new equipment.

### Backend

Expand All @@ -9,3 +9,12 @@ It should track the equipment of members. This includes moving equipment from on
### Frontend

`cd frontend && npm run dev`

#### Icons the noun project

- Helmet: https://thenounproject.com/icon/helmet-1731740/
- Jacket: https://thenounproject.com/icon/jacket-3740852/
- Trousers: https://thenounproject.com/icon/overalls-3339334/
- Gloves: https://thenounproject.com/icon/gloves-1517900/
- Boots: https://thenounproject.com/icon/boots-3426864/
- TShirt: https://thenounproject.com/icon/tshirt-110299/
41 changes: 0 additions & 41 deletions equipment/equipment.go

This file was deleted.

28 changes: 25 additions & 3 deletions equipment/equipment.service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package equipment
import (
"net/http"

"github.com/kordondev/equipment-watchdog/models"
"gorm.io/gorm"

"github.com/cloudflare/cfssl/log"
"github.com/gin-gonic/gin"
"github.com/kordondev/equipment-watchdog/url"
Expand All @@ -12,9 +15,9 @@ type EquipmentService struct {
db *equipmentDB
}

func NewEquipmentService(equipmentDB *equipmentDB) *EquipmentService {
func NewEquipmentService(db *gorm.DB) *EquipmentService {
return &EquipmentService{
db: equipmentDB,
db: newEquipmentDB(db),
}
}

Expand Down Expand Up @@ -54,7 +57,7 @@ func (s *EquipmentService) GetAllEquipmentByType(c *gin.Context) {
}

func (s *EquipmentService) CreateEquipment(c *gin.Context) {
var e equipment
var e models.Equipment
if err := c.BindJSON(&e); err != nil {
c.AbortWithError(http.StatusBadRequest, err)
return
Expand Down Expand Up @@ -85,3 +88,22 @@ func (s *EquipmentService) DeleteEquipment(c *gin.Context) {
}
c.Status(http.StatusOK)
}

func (s *EquipmentService) GetAllByIds(ids []uint64) ([]*models.Equipment, error) {
return s.db.getAllByIds(ids)
}

func (s *EquipmentService) FreeEquipment(c *gin.Context) {
equipment, err := s.db.getFreeEquipment()

equipments := make(map[models.EquipmentType][]*models.Equipment)
for _, e := range equipment {
equipments[e.Type] = append(equipments[e.Type], e)
}
if err != nil {
log.Error(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
c.JSON(http.StatusOK, equipments)
}
72 changes: 52 additions & 20 deletions equipment/equipmentDB.go
Original file line number Diff line number Diff line change
@@ -1,57 +1,89 @@
package equipment

import (
"log"

"github.com/kordondev/equipment-watchdog/models"
"gorm.io/gorm"
)

type equipmentDB struct {
db *gorm.DB
}

func NewEquipmentDB(db *gorm.DB) *equipmentDB {
db.AutoMigrate(&dbEquipment{})
func newEquipmentDB(db *gorm.DB) *equipmentDB {
err := db.AutoMigrate(&models.DbEquipment{})
if err != nil {
log.Fatal(err)
}

return &equipmentDB{
db: db,
}
}

func (edb *equipmentDB) getById(id uint64) (*equipment, error) {
var e dbEquipment
err := edb.db.Model(&dbEquipment{}).First(&e, "ID = ?", id).Error
func (edb *equipmentDB) getById(id uint64) (*models.Equipment, error) {
var e models.DbEquipment
err := edb.db.Model(&models.DbEquipment{}).First(&e, "ID = ?", id).Error

if err != nil {
return &equipment{}, err
return &models.Equipment{}, err
}

return e.fromDB(), nil
return e.FromDB(), nil
}

func (edb *equipmentDB) getByType(equipmentType string) ([]*equipment, error) {
dbEquipment := make([]dbEquipment, 0)
func (edb *equipmentDB) getByType(equipmentType string) ([]*models.Equipment, error) {
dbEquipment := make([]models.DbEquipment, 0)

err := edb.db.Where("type = ?", equipmentType).Find(&dbEquipment).Error
if err != nil {
return make([]*equipment, 0), err
}

equipment := make([]*equipment, 0)
for _, v := range dbEquipment {
equipment = append(equipment, v.fromDB())
return make([]*models.Equipment, 0), err
}

return equipment, nil
return listFormDB(dbEquipment), nil
}

func (edb *equipmentDB) Create(equipment *equipment) (*equipment, error) {
e := equipment.toDb()
func (edb *equipmentDB) Create(equipment *models.Equipment) (*models.Equipment, error) {
e := equipment.ToDb()
err := edb.db.Create(&e).Error
if err != nil {
return nil, err
}
return e.fromDB(), nil
return e.FromDB(), nil
}

func (edb *equipmentDB) delete(id uint64) error {
return edb.db.Delete(&dbEquipment{}, id).Error
return edb.db.Delete(&models.DbEquipment{}, id).Error
}

func (edb *equipmentDB) getAllByIds(ids []uint64) ([]*models.Equipment, error) {
dbEquipment := make([]models.DbEquipment, 0)

err := edb.db.Where("id IN ?", ids).Find(&dbEquipment).Error
if err != nil {
return make([]*models.Equipment, 0), err
}

return listFormDB(dbEquipment), nil
}

func (edb *equipmentDB) getFreeEquipment() ([]*models.Equipment, error) {
dbEquipment := make([]models.DbEquipment, 0)

err := edb.db.Where("member_id IS null OR member_id is 0").Find(&dbEquipment).Error
if err != nil {
return make([]*models.Equipment, 0), err
}

return listFormDB(dbEquipment), nil
}

func listFormDB(dbEquipment []models.DbEquipment) []*models.Equipment {
equipment := make([]*models.Equipment, 0)
for _, v := range dbEquipment {
equipment = append(equipment, v.FromDB())
}

return equipment
}
2 changes: 1 addition & 1 deletion frontend/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html lang="en" class="dark">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<link rel="icon" type="image/svg+xml" href="/helmet.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Equipment Watchdog</title>
</head>
Expand Down
7 changes: 7 additions & 0 deletions frontend/public/boots.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions frontend/public/gloves.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 4205ed7

Please sign in to comment.