diff options
-rw-r--r-- | rust/README.md | 21 | ||||
-rw-r--r-- | rust/TODO | 47 |
2 files changed, 48 insertions, 20 deletions
diff --git a/rust/README.md b/rust/README.md index 78adfc48..e790c425 100644 --- a/rust/README.md +++ b/rust/README.md @@ -5,12 +5,16 @@ Rust implementation of fatcat API server (`fatcatd`). - HTTP API - [ ] base32 encoding of UUID identifiers + - [ ] inverse many-to-many helpers (files-by-release, release-by-creator) - SQL Schema - [x] Basic entities - - [ ] one-to-many and many-to-many entities - - [ ] JSON(B) "extra" metadata fields + - [x] one-to-many and many-to-many entities + - [x] JSON(B) "extra" metadata fields + - [ ] full rev1 schema for all entities + - [ ] editgroup review: comments? actions? - Web Interface - [ ] Migrate Python codebase + - [ ] Creation and editing of all entities - Other - [x] Basic logging - [x] Swagger-UI @@ -18,6 +22,7 @@ Rust implementation of fatcat API server (`fatcatd`). - [ ] Metrics - [ ] Authentication (eg, accounts, OAuth2, JWT) - [ ] Authorization (aka, roles) + - [ ] bot vs. editor ## Development @@ -83,17 +88,11 @@ On a bare server, as root: ### Special Tricks -Regenerate API schemas: +Regenerate API schemas (this will, as a side-effect, also run `cargo fmt` on +the whole project, so don't run it with your editor open): cargo install cargo-swagger # uses docker - cargo swagger fatcat-openapi2.yml fatcat-api --docker-tag=v2.3.1 - sudo chown `whoami`:`whoami` -R fatcat-api - - # usually want to keep our changes to sub-module toml - git checkout fatcat-api/Cargo.toml - - cargo fmt - # git commit the fatcat-api directory at this point + ./codegen_openapi2.sh Regenerate SQL schema: @@ -10,16 +10,45 @@ x clean up blasse error handling a bit x add 404s to gets x wow. fix a bunch of api schema names ("FindASingleContainerByExternalIdentifer") x refactor handlers to have a proper Result<_,_> error-chain type, so I can use '?' -- one-to-many relationship (eg, works) -- many-to-many relationship (eg, creators) -- creators, releases, works, files (?) -- copypasta a bunch of CRUD -- helper to calculate state of idents - -then: +x move python to subdirectory +x rename binary +x copypasta a bunch of CRUD +x swagger endpoint +x helper to calculate 'state' of idents +x tests for orcid and issn lookups +x editgroup helper (for POST) +x creators, releases, works, files +x editgroup accept +x edits, groups, etc +x JSON +x one-to-many relationship (eg, works) +x more dummy data (tests the schema) x encode the remaining entities in SQL x openapi for other entities (heavily templated) -- figure out JSON(B) in both swagger and diesel +x testing framework +x file/release relation +x refactor tests (response check, setup) +x better test coverage (all entity types, get and post) +x editgroup GET API schema arrays later: -- metrics, jwt, config, sentry, testing +- generate python client library? +- web interface? +- editgroup: state to track review status? +- all those python tests +- enforce "no editing if editgroup accepted" behavior +- refactor entity creation/editing (DRY) +- refactor to allow Result<> in all handlers +- real auth +- metrics, jwt, config, sentry +- ansible/deployment/DNS story +- refactor logging; use slog + +schema/api questions: +- url table (for files) +- get works/releases by creator +- "types" +- define release field stuff +- what should entity POST return? include both the entity and the edit? +- PUTs (updates) to entities + |