Compare commits
5 Commits
316b67c596
...
136da63d00
Author | SHA1 | Date |
---|---|---|
Rob Loranger | 136da63d00 | |
Rob Loranger | acfec3b97e | |
Rob Loranger | 0b0d4cb982 | |
Sundog | abe545397b | |
Sundog | cb3f76aa17 |
|
@ -0,0 +1,30 @@
|
|||
# Contribution Guidelines
|
||||
|
||||
## Code Formatting
|
||||
|
||||
We format all Rust code using edition 2021 rules. This edition is defined in our Cargo.toml and most methods below will pick this up automatically.
|
||||
|
||||
### Manual Method
|
||||
|
||||
The most editor agnostic way to format your Rust code is by manually running cargo's fmt sub command.
|
||||
|
||||
To check if your code is formatted without making changes, run `cargo fmt --check`. Then if you want to format your code you can run just `cargo fmt`.
|
||||
|
||||
### VScode
|
||||
|
||||
We recommend the meta extension [Rust Bundle](https://marketplace.visualstudio.com/items?itemName=1YiB.rust-bundle) , which includes rust-analyzer. ([More info](https://code.visualstudio.com/docs/languages/rust) on Rust with VScode) Then to set your editor to format on save:
|
||||
|
||||
* In Visual Studio Code, press Control + Shift + P or Command + Shift + P (Mac) to open the command palette and type setting and then select Preferences: Open User Settings option.
|
||||
* Search for format on save setting and check the checkbox.
|
||||
|
||||
You can also set language specific settings as outlined [here](https://code.visualstudio.com/docs/getstarted/settings#_language-specific-editor-settings). You will again want to then search for format on save and check the checkbox.
|
||||
|
||||
### Other Editors
|
||||
|
||||
You will first need to [install rust-analyzer](https://rust-analyzer.github.io/manual.html#installation), then configure your editor and install any needed plugins or extensions as outlined on that page.
|
||||
|
||||
### Pre Commit Hook
|
||||
|
||||
If you want to think about formatting your code less and just have git yell at you whe you try to commit code that is not properly formatted, you can use a simple pre-commit hook.
|
||||
|
||||
After cloning the repo, move the file `pre-commit` to `.git/hooks/pre-commit`. That's it.
|
84
MODELS.md
84
MODELS.md
|
@ -185,7 +185,6 @@ struct Track {
|
|||
is_available: bool,
|
||||
preview_source: Option<String>,
|
||||
source: String,
|
||||
price: Option<rusty_money::Money>,
|
||||
created_by: PersonId,
|
||||
created_at: chrono::DateTime,
|
||||
modified_by: PersonId,
|
||||
|
@ -218,7 +217,6 @@ struct Album {
|
|||
is_available: bool,
|
||||
preview_source: Option<String>,
|
||||
source: String,
|
||||
price: Option<rusty_money::Money>,
|
||||
created_by: PersonId,
|
||||
created_at: chrono::DateTime,
|
||||
modified_by: PersonId,
|
||||
|
@ -289,23 +287,14 @@ struct Article {
|
|||
A Comment represents a textual comment that a Person wants to attach contextually to an Artist, an Album, a Track, or a Playlist.
|
||||
|
||||
``` rust
|
||||
enum CommentTargetType {
|
||||
Label,
|
||||
Artist,
|
||||
Album,
|
||||
Track,
|
||||
Playlist,
|
||||
Article,
|
||||
Comment,
|
||||
}
|
||||
struct CommentTargetId {
|
||||
label_id: Option<LabelId>,
|
||||
artist_id: Option<ArtistId>,
|
||||
album_id: Option<AlbumId>,
|
||||
track_id: Option<TrackId>,
|
||||
playlist_id: Option<PlaylistId>,
|
||||
article_id: Option<ArticleId>,
|
||||
comment_id: Option<CommentId>,
|
||||
enum CommentTarget {
|
||||
Label(LabelId),
|
||||
Artist(ArtistId),
|
||||
Album(AlbumId),
|
||||
Track(TrackId),
|
||||
Playlist(PlaylistId),
|
||||
Article(ArticleId),
|
||||
Comment(CommentId),
|
||||
}
|
||||
struct CommentId {
|
||||
id: String,
|
||||
|
@ -313,8 +302,7 @@ struct CommentId {
|
|||
struct Comment {
|
||||
id: CommentId,
|
||||
body: String,
|
||||
target_type: CommentTargetType,
|
||||
target_id: CommentTargetId,
|
||||
target: CommentTarget,
|
||||
created_by: PersonId,
|
||||
created_at: chrono::DateTime,
|
||||
modified_by: Option<PersonId>,
|
||||
|
@ -405,7 +393,6 @@ struct Collection {
|
|||
albums: Option<Vec<Album>>,
|
||||
tracks: Option<Vec<Track>>,
|
||||
other_products: Option<Vec<OtherProduct>>,
|
||||
price: Option<rusty_money::Money>,
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -429,7 +416,7 @@ struct OtherProduct {
|
|||
is_available: bool,
|
||||
deleted_by: Option<PersonId>,
|
||||
deleted_at: Option<chrono::DateTime>,
|
||||
price: Option<rusty_money::Money>
|
||||
requires_shipping: bool,
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -439,10 +426,10 @@ A Purchase represents one or more Tracks or Albums that a Person purchases from
|
|||
|
||||
``` rust
|
||||
enum PurchaseItemType {
|
||||
Album,
|
||||
Track,
|
||||
Collection,
|
||||
OtherProduct,
|
||||
Album(AlbumId),
|
||||
Track(TrackId),
|
||||
Collection(CollectionId),
|
||||
OtherProduct(OtherProductId),
|
||||
}
|
||||
struct PurchaseItemId {
|
||||
id: String,
|
||||
|
@ -452,18 +439,15 @@ struct SkuId {
|
|||
}
|
||||
struct Sku {
|
||||
id: SkuId,
|
||||
album_id: Option<AlbumId>,
|
||||
track_id: Option<TrackId>,
|
||||
collection_id: Option<CollectionId>,
|
||||
other_product_id: Option<OtherProductId>,
|
||||
item: PurchaseItemType,
|
||||
variant: Option<String>,
|
||||
discount_percentage: Option<f64>,
|
||||
discount_flatrate: Option<rusty_money::Money>,
|
||||
description: Option<String>,
|
||||
price: Option<rusty_money::Money>,
|
||||
requires_shipping: bool,
|
||||
}
|
||||
struct PurchaseItem {
|
||||
id: PurchaseItemId,
|
||||
type: PurchaseItemType,
|
||||
sku: Option<SkuId>,
|
||||
sku: SkuId,
|
||||
quantity: usize,
|
||||
}
|
||||
enum PurchaseState {
|
||||
|
@ -481,5 +465,35 @@ struct Purchase {
|
|||
state: PurchaseState,
|
||||
purchased_by: Person,
|
||||
purchased_at: Option<chrono::DateTime>,
|
||||
fulfilled_by: Option<Person>,
|
||||
fulfilled_at: Option<chrono::DateTime>,
|
||||
}
|
||||
```
|
||||
|
||||
# CouponCode
|
||||
|
||||
A CouponCode represents a code a Person can enter to receive a discount on a PurchateItem or on a Purchase.
|
||||
|
||||
``` rust
|
||||
struct CouponCodeId {
|
||||
id: String,
|
||||
}
|
||||
struct CouponCode {
|
||||
id: CouponCodeId,
|
||||
name: String,
|
||||
code: String,
|
||||
uses: usize,
|
||||
max_uses: usize,
|
||||
expiration: Option<chrono::DateTime>,
|
||||
discount_flat: Option<rusty_money::Money>,
|
||||
discount_percentage: Option<f32>,
|
||||
skus: Option<Vec<SkuId>>,
|
||||
is_active: bool,
|
||||
created_by: PersonId,
|
||||
created_at: chrono::DateTime,
|
||||
modified_by: PersonId,
|
||||
modified_at: chrono::DateTime,
|
||||
deleted_by: Option<PersonId>,
|
||||
deleted_at: Option<chrono::DateTime>,
|
||||
}
|
||||
```
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
cargo fmt --check
|
Loading…
Reference in New Issue