Skip to content

Template repository for homework project in Web and Software Architecture course @ Sapienza University of Rome - http://gamificationlab.uniroma1.it/en/wasa/

License

Notifications You must be signed in to change notification settings

sapienzaapps/fantastic-coffee-decaffeinated

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fantastic coffee (decaffeinated)

This repository contains the basic structure for Web and Software Architecture homework project. It has been described in class.

"Fantastic coffee (decaffeinated)" is a simplified version for the WASA course, not suitable for a production environment. The full version can be found in the "Fantastic Coffee" repository.

Project structure

  • cmd/ contains all executables; Go programs here should only do "executable-stuff", like reading options from the CLI/env, etc.
    • cmd/healthcheck is an example of a daemon for checking the health of servers daemons; useful when the hypervisor is not providing HTTP readiness/liveness probes (e.g., Docker engine)
    • cmd/webapi contains an example of a web API server daemon
  • demo/ contains a demo config file
  • doc/ contains the documentation (usually, for APIs, this means an OpenAPI file)
  • service/ has all packages for implementing project-specific functionalities
    • service/api contains an example of an API server
    • service/globaltime contains a wrapper package for time.Time (useful in unit testing)
  • vendor/ is managed by Go, and contains a copy of all dependencies
  • webui/ is an example of a web frontend in Vue.js; it includes:
    • Bootstrap JavaScript framework
    • a customized version of "Bootstrap dashboard" template
    • feather icons as SVG
    • Go code for release embedding

Other project files include:

  • open-node.sh starts a new (temporary) container using node:20 image for safe and secure web frontend development (you don't want to use node in your system, do you?).

Go vendoring

This project uses Go Vendoring. You must use go mod vendor after changing some dependency (go get or go mod tidy) and add all files under vendor/ directory in your commit.

For more information about vendoring:

Node/YARN vendoring

This repository uses yarn and a vendoring technique that exploits the "Offline mirror". As for the Go vendoring, the dependencies are inside the repository.

You should commit the files inside the .yarn directory.

How to set up a new project from this template

You need to:

  • Change the Go module path to your module path in go.mod, go.sum, and in *.go files around the project
  • Rewrite the API documentation doc/api.yaml
  • If no web frontend is expected, remove webui and cmd/webapi/register-webui.go
  • Update top/package comment inside cmd/webapi/main.go to reflect the actual project usage, goal, and general info
  • Update the code in run() function (cmd/webapi/main.go) to connect to databases or external resources
  • Write API code inside service/api, and create any further package inside service/ (or subdirectories)

How to build

If you're not using the WebUI, or if you don't want to embed the WebUI into the final executable, then:

go build ./cmd/webapi/

If you're using the WebUI and you want to embed it into the final executable:

./open-node.sh
# (here you're inside the container)
yarn run build-embed
exit
# (outside the container)
go build -tags webui ./cmd/webapi/

How to run (in development mode)

You can launch the backend only using:

go run ./cmd/webapi/

If you want to launch the WebUI, open a new tab and launch:

./open-node.sh
# (here you're inside the container)
yarn run dev

How to build for production / homework delivery

./open-node.sh
# (here you're inside the container)
yarn run build-prod

For "Web and Software Architecture" students: before committing and pushing your work for grading, please read the section below named "My build works when I use yarn run dev, however there is a Javascript crash in production/grading"

Known issues

My build works when I use yarn run dev, however there is a Javascript crash in production/grading

Some errors in the code are somehow not shown in vite development mode. To preview the code that will be used in production/grading settings, use the following commands:

./open-node.sh
# (here you're inside the container)
yarn run build-prod
yarn run preview

License

See LICENSE.