Commit Graph

70 Commits

Author SHA1 Message Date
964ab26007 Set title on unacceptable merch type error 2021-02-28 18:48:14 -05:00
6b07ec7d07 Check keywords on transaction, update shop gold
Shops now have a "type" and keywords of items they only deal with.

Also add vendors table in preparation for implementing the endpoint.
2021-02-12 00:35:19 -05:00
a64caa4081 Add keywords to transactions table
Keywords are now saved to the merchandise_list form_list when selling to the
shop.
2021-02-09 23:46:42 -05:00
80345c3a6f Add keywords to Merchandise 2021-02-09 01:00:28 -05:00
55c68fee2c Fix incorrect constraint in error handler 2021-01-15 17:22:50 -05:00
2f95fab825 Update sqlx-data.json 2020-11-29 02:26:50 -05:00
81840b3d34 Add shelves list to interior_ref_lists
So that shops can have multiple shelves that save their page, filter, sort, etc.
state to the server. Buttons for the shelves are reconstructed in the plugin
during the load shop procedure.
2020-11-21 01:29:25 -05:00
0adbf7c5c0 Use non-blocking logging io and LTO in release
Also tweak README explanation of sqlx prepare.
2020-11-18 23:28:03 -05:00
b214786415 Nicer 404 error with problem JSON 2020-11-15 00:42:53 -05:00
d9a891c6b5 Update sqlx-data.json 2020-11-14 22:46:18 -05:00
50184da1f6 Fixed bincode responses, refactored content_type handling, better error reporting
Fixed issues with Bincode responses not actually being readable, oops. Also fix handling Bincode requests.

Added `TypedCache` for DRYing up GET request content-type handling.

Added `DeserializedBody` for DRYing up POST/PATCH request conent-type handling.

Removed "Unsaved" structs since I could just mutate Posted structs instead.

Added improved error reporting and stopped sending unfiltered interal error data.

Upgraded sqlx to proper 0.4.1 release.
2020-11-14 02:19:33 -05:00
0bc94e4b7d Add custom server header to responses 2020-11-12 21:05:04 -05:00
a1107b7100 Better readme instructions for docker and tls 2020-11-12 21:01:29 -05:00
9949c537a0 Add more docker setup instructions 2020-11-12 01:41:06 -05:00
d277b5c5cd Allow configuring port, serve over https 2020-11-11 18:41:38 -05:00
9334c3a47d Get rid of log file 2020-11-11 18:06:13 -05:00
9410cbf6a5 Fully working docker setup, switch to sqlx migrate 2020-11-11 17:21:50 -05:00
e44aa9ddfc Run server in docker container, added log file 2020-11-09 02:00:14 -05:00
5413fba309 Enable sqlx offline mode, add sqlx-data.json 2020-11-09 00:47:59 -05:00
780f0be433 Upgrade to sqlx 0.4 beta master branch
This required a ton of changes including updating error handling and separating out the models into intermediate representations so that fields that are marked non-null in the database are not `Option` in the final model.

The update allows using `query_as!` in `interior_ref_list` and `merchandise_list` and model functions to specify a generic `Executor` param that can take either a db pool connection, transaction, or plain db connection. This should allow me to impl my old `Model` trait again.

Also compile times are magically 20x faster?!?
2020-11-09 00:37:04 -05:00
1a1806ffc3 Initial docker setup using rust-musl-builder
Not working yet because sqlx 0.3 doesn't have an offline mode
2020-11-08 21:12:28 -05:00
377a260a2f Simplify handler content_type switching
The inner functions were a bit too cumbersome. I found a more compact way to do it in one flat function.
2020-11-08 20:10:32 -05:00
e0cc81c97e Update all endpoints to accept and send bincode 2020-11-08 17:58:11 -05:00
6ac4b03a0a Conditionally reply with bincode or json
In the process of converting all endpoints. Just interior_ref_list and merchandise_list done so far.
2020-11-08 03:09:40 -05:00
2f69c86645 Add bincode format to endpointI'm testing out serializing data with bincode and using the Accept header to switch between formats for GET responses.If this works, I'll extend it to all endpoints and also add deserializing bincode from POST and PATCH requests. 2020-11-07 03:03:40 -05:00
a53eeffb0f Delay set cache after response, make cache static
Uses `tokio::spawn` to delay updating the cache while the server responds to the request.

Because `tokio::spawn` can run on another thread, references need to be static, so I initialized the cache in `lazy_static`.
2020-11-07 00:28:54 -05:00
0980d01640 Return etag in create & update responses 2020-11-05 18:09:43 -05:00
8cb76d6ff4 Add ETag headers to get/list endpoints
Now the client can opt out of receiving the whole JSON body if it hasn't changed since they last requested.

Right now, only `ETag` and `If-None-Match` headers are implemeted which isn't very RFC-spec compliant but it's all I need so I don't care.
2020-11-02 20:22:12 -05:00
4074ad0c97 Filter noisy bit of debug log 2020-11-02 01:27:46 -05:00
08c8dcb07b Working create_transaction endpoint
Creates the transaction record and updates the merchandise quantity in one db transaction.

Managed to do the merchandise update in one UPDATE query, but the error that's thrown when an item to buy is not found is pretty confusing, so I convert it to a 404.

I also added some DB indexes.
2020-10-31 20:34:20 -04:00
c87c35021e New transactions endpoint, split up handlers file 2020-10-30 00:22:26 -04:00
fb5c78ac4f Simplify form_list check constraint 2020-10-28 23:56:53 -04:00
e482e7764d Handle update merchandise quantity to 0 and < 0
When quantity = 0 remove the merchandise item from the form_list.

When quantity < 0 continue with the update which will fail on the new constraint
2020-10-28 23:40:38 -04:00
e831a925f5 Simplify db migrations
Use `refinery_cli` against a folder of `.sql` migrations.

I got tired of commenting out my code when I just wanted to rerun the initial migration.

Plain SQL is a lot more flexible than the `barrel` syntax.
2020-10-28 22:20:39 -04:00
e0bba0254c Add buy_merchandise endpoint
Temporary for now, eventually this should actually create a transaction record.

All it does now is update the merchandise quantity.
2020-10-26 00:51:01 -04:00
58583a553a Add update by shop id handlers 2020-10-25 03:16:46 -04:00
df48b64ffd one interior_ref_list and merchandise_list per shop
still some bugs with routing I need to figure out
2020-10-24 03:01:38 -04:00
3f124ce439 Move filters into main.rs for SPEED
Using a macro from the warp github to balance the OR filter tree which sped up compile times by 10x.
2020-10-20 21:50:01 -04:00
0dc4247224 Add latest_interior_ref_list_by_shop_id endpoint
Not sure if this is correct yet, still waiting for rustc to compile...
2020-10-20 01:13:40 -04:00
97a2ac52dc Add update shop & owner endpoints 2020-10-18 02:31:17 -04:00
441bc979f2 Update related projects in README 2020-10-12 21:40:25 -04:00
2b1db3e438 Add related projects to README 2020-10-12 21:06:09 -04:00
db8ccb3ca4 Rename the project and add more README docs 2020-10-12 20:54:34 -04:00
7fa6fe2b04 Update README with Windows setup and db seeding 2020-10-11 03:03:09 -04:00
fc057e86dd Add merchandise_lists endpoint 2020-10-11 01:20:55 -04:00
8d5fe7f75d Update schema, add status endpoint 2020-09-07 16:51:01 -04:00
170a3a8b02 Remove bytes dependency 2020-08-01 02:24:39 -04:00
d1c933e1ea Add authentication to more handlers 2020-08-01 02:18:31 -04:00
eb7706974e Fix readme 2020-08-01 00:44:05 -04:00
519fcb4c5a Add caching with LRU cache under mutex
Caches responses of each GET handler in a separate capacity-limited cache (as a
custom clone-able `CachedResponse` struct). Subsequent requests will build a
`Response` from the cached bytes instead of re-querying the database and
re-serializing the JSON. This greatly speeds up the list endpoints and
`get_interior_ref_list`.

Also caches the api-key-to-id mapping for `Owner`s in order to speed up frequent
authentications.

Each create handler clears the entire list response cache. Each delete handler
also clears the entire list response cache and deletes the cached response for
that key. Deleting an owner also deletes their entry in the
`owner_ids_by_api_key` cache.
2020-08-01 00:25:04 -04:00