Add Specification

Charlie Crossley 2023-08-02 23:11:20 +01:00
parent fc78a8d922
commit 12572e78a9

51
Specification.md Normal file

@ -0,0 +1,51 @@
# Specification
Here we set out the functional specification for the project.
***
## Access
Primary model: `User`
See also: https://docs.djangoproject.com/en/4.2/topics/auth/customizing/#extending-the-existing-user-model
- **Authentication**: The system must be able to authenticate users.
- **SMA**: The system must be accessible concurrently by multiple users in multiple locations.
- **Permissions**: The system must be able to restrict the abilities of certain users to perform certain functions.
- **Mobile-Friendly**: The system must be just as easy to use from a phone as a computer.
- Modern reactive CSS can handle almost all of this
## Cave Data
Primary model: `Cave`
- **Survey Creation**: The system must be able to parse survey data input to it via a webform.
- **Survey Upload**: The system must be able to parse survey files (`.svx`).
- **Survey Viewing**: The system must support searching for, browsing, and viewing survey (_Survex_) data.
- **Survey Editing**: The system must support editing of survey (_Survex_) data via a web-form.
- **Survey Export**: The system must be able to export survey files (`.svx`).
- **Drawing Upload**: They system must support uploading of drawing (_Tunnel_/_Therion_) data
## Expedition Logging
Primary model: `Entry`
- **Logbook Creation**: The system must support creation of new expeditions/logbooks.
- **Logbook Entry Creation**: The system must support creation of new logbook entries.
- **Logbook Entry Editing**: The system must support editing of logbook entries.
## Static Information
Primary model: `django.contrib.flatpages.models.Flatpage`
See also: https://docs.djangoproject.com/en/4.2/ref/contrib/flatpages/
- **Flatpages**: The system must allow users to add/edit/delete etc. static pages.
- Ideally, editing should be WYSIWYG first, with support for direct markup editing for power-users.
- Alternatively, a third-party wiki app could simply be pulled into the project, cutting out the need to reinvent this particular wheel.
## Development
- **Deployment Scripts**: The development environment should be easy to set up on any system using a single `dev_setup.sh` script or similar
- **Test data**: a set of test-data should be provided for the development environment to work on.