Skip to content

Code Structure

The Registry's GitHub repository contains the follwing directories and files:

Name Description
.github/workflows Just what it says. Workflows including mirroring code to Gitlab.
.vscode Contains a barbones launch.json file telling VS Code how the launch the Registry app.
alert_templates Contains a set of text templates used to send email alerts to Registry users.
app Contains the main application.go file that defines routes, template helpers, and initializes middleware.
bin Contains NSQ and Redis binaries to run external services on Mac and Linux. These are required for testing. See bin/ for details.
cfn Contains CloudFormation templates for deploying Registry to Fargate. The key files are cfn-registry-cluster.tmpl, which is a template for the deployment file, and cfn-registry-cluster.yml, which is the actual deployment file.
common Contains code commonly used by other components throughout the Registry app. The most important of these are the Configuration Object and the Context Object.
constants Defines constants.go used throughout the application and permissions.go defining which roles can do what. We don't put permissions in the database because we want them to be immutable.
db Contains the database schema, migrations, fixitures, and some utility functions to load fixtures for testing.
docs Contains wireframes used in the UI design process.
forms Defines objects used to render, validate and parse form data.
helpers Defines a number of helper functions used in text and HTML templates.
loader Contains code for a standalone app to load database fixtures.
middleware Contains code for user authentication and authorization, and resource setup used in virtually all web and API requests.
network Contains code for clients that talk to external services, including Authy, NSQ, Redis, and Amazon's SES (Email) and SNS (Text/SMS).
pgmodels Defines the data models for items stored in the Postgres database.
static Contains statically served web resources, including scripts, stylesheets and images.
swagger Contains the output of the Swagger documentation generator. This output is served on our Swagger doc site
views Contains HTML templates for all pages in the Web UI.
web Contains handlers for web requests. Read on...
web/api Contains handlers for API requests.
web/api/admin Contains handlers specific to the admin API, which is the read-write API used by Preserv to process ingests, deletions, restorations and fixity checks.
web/api/common Contains handlers for the read-only member API. Some of these handlers are also used by the admin API. See the routing table in app/application.go
web/testutil Contains utilities for testing the web UI and REST APIs.
web/webui Contains handlers for web UI requests.
.env files Contain settings used in various environments (dev, test, etc.)
Dockerfile Describes how to build Registry's Docker container.
Dockerfile.multi ?
Makefile Contains build commands to create the Docker container and update the CloudFormation deployment template.
member_api_v3.yml Contains a description of the API used to generate Swagger docs.
registry A shell script used to run and/or test the Registry. ./registry serve runs an instance of the Registry on localhost:8080 (along with NSQ and Redis). ./registry test runs the test suite.
registry.go The file from which the Registry binary is compiled. Its main() method creates an instance of the app and runs it, listening on port 8080.