Commit Graph

44 Commits

Author SHA1 Message Date
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
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
db8ccb3ca4 Rename the project and add more README docs 2020-10-12 20:54:34 -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
d1c933e1ea Add authentication to more handlers 2020-08-01 02:18:31 -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
68b04b4f4c Add auth to delete endpoints 2020-07-30 01:09:29 -04:00
79b45551fd Add delete endpoints and clean up filters 2020-07-29 00:02:48 -04:00
17cd3f12d2 Improve model query performance tracing 2020-07-28 22:01:57 -04:00
b16ba3e3f7 Swap out old log for shiny tracing 2020-07-27 22:36:48 -04:00
fb99afdc26 Encode/decode InteriorRef struct from jsonb column 2020-07-27 00:09:45 -04:00
29eadabc8a interior_refs -> interior_ref_lists, finish insert 2020-07-23 00:13:31 -04:00
6eb58935e3 Move interior refs list to interior_refs table
Still WIP, need to actually save the data to the table.
2020-07-22 22:42:17 -04:00
65e6ba1f8a WIP adding interior_refs endpoints
Ran into some limitations of sqlx while trying to bulk create interior_refs. I
also discovered how slow creating hundreds of rows in postgres is and I'm
planning on saving interior_refs data in a jsonb column instead which seems to
be much faster.
2020-07-19 03:01:20 -04:00
9985f123c9 Remove refinery.toml from source control 2020-07-19 03:00:54 -04:00
9ea3e35359 Allow no ORDER BY clause by default in list method 2020-07-18 18:10:45 -04:00
9ec7fc1518 Modularize, Model trait, list_owners 2020-07-18 17:46:33 -04:00
6b1f31f246 Add list_shops endpoint 2020-07-17 01:05:58 -04:00
28d6e50a5a Clean up filter chain a bit 2020-07-16 00:56:51 -04:00
3df7af7032 Easier to read handler reply style 2020-07-16 00:48:41 -04:00
aebcaf7d21 Working shops and owners create/get endpoints 2020-07-16 00:42:04 -04:00
91ff001c53 Initial commit. WIP shops endpoint
Pretty comfortable with the choice of crates now so it's time to start
committing.

Currently the API only returns errors, but throwing good errors is important.
2020-07-13 01:55:36 -04:00