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.
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 filedoc/
contains the documentation (usually, for APIs, this means an OpenAPI file)service/
has all packages for implementing project-specific functionalitiesservice/api
contains an example of an API serverservice/globaltime
contains a wrapper package fortime.Time
(useful in unit testing)
vendor/
is managed by Go, and contains a copy of all dependencieswebui/
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-npm.sh
starts a new (temporary) container usingnode:lts
image for safe web frontend development (you don't want to usenpm
in your system, do you?)
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:
This repository contains the webui/node_modules
directory with all dependencies for Vue.JS. You should commit the content of that directory and both package.json
and package-lock.json
.
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
andcmd/webapi/register-webui.go
- If no cronjobs or health checks are needed, remove them from
cmd/
- 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 insideservice/
(or subdirectories)
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-npm.sh
# (here you're inside the NPM container)
npm run build-embed
exit
# (outside the NPM container)
go build -tags webui ./cmd/webapi/
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-npm.sh
# (here you're inside the NPM container)
npm run dev
./open-npm.sh
# (here you're inside the NPM container)
npm 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 npm run dev
, however there is a Javascript crash in production/grading"
If you use Apple M1/M2 hardware, or other ARM CPUs, you may encounter an error message saying that esbuild
(or some other tool) has been built for another platform.
If so, you can fix issuing these commands only the first time:
./open-npm.sh
# (here you're inside the NPM container)
npm install
exit
# Now you can continue as indicated in "How to build/run"
Use these instructions only if you get an error. Do not use it if your build is OK.
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-npm.sh
# (here you're inside the NPM container)
npm run build-prod
npm run preview
See LICENSE.