5 Commits

Author SHA1 Message Date
136da63d00 Fix typo and add rust market links
Adds links to the rust meta extension and the VScode rust page
2023-10-21 16:28:04 -07:00
acfec3b97e fix pre-commit filename typo 2023-10-21 16:28:04 -07:00
0b0d4cb982 add formatting doc and pre-commit 2023-10-21 16:28:04 -07:00
abe545397b more model refinement 2023-10-20 09:37:57 -04:00
cb3f76aa17 refines MODELS around cart functionality, moves all pricing into Sku model, adds CouponCode model 2023-10-20 09:32:52 -04:00
2 changed files with 51 additions and 37 deletions

View File

@ -12,7 +12,7 @@ To check if your code is formatted without making changes, run `cargo fmt --chec
### VScode ### VScode
We recommend the meta extension Rust, which includes rust-analyzer. Then to set your editor to format on save: 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. * 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. * Search for format on save setting and check the checkbox.
@ -27,4 +27,4 @@ You will first need to [install rust-analyzer](https://rust-analyzer.github.io/m
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. 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, the file `pre-commit` to `.git/hooks/pre-commit`. That's it. After cloning the repo, move the file `pre-commit` to `.git/hooks/pre-commit`. That's it.

View File

@ -185,7 +185,6 @@ struct Track {
is_available: bool, is_available: bool,
preview_source: Option<String>, preview_source: Option<String>,
source: String, source: String,
price: Option<rusty_money::Money>,
created_by: PersonId, created_by: PersonId,
created_at: chrono::DateTime, created_at: chrono::DateTime,
modified_by: PersonId, modified_by: PersonId,
@ -218,7 +217,6 @@ struct Album {
is_available: bool, is_available: bool,
preview_source: Option<String>, preview_source: Option<String>,
source: String, source: String,
price: Option<rusty_money::Money>,
created_by: PersonId, created_by: PersonId,
created_at: chrono::DateTime, created_at: chrono::DateTime,
modified_by: PersonId, 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. A Comment represents a textual comment that a Person wants to attach contextually to an Artist, an Album, a Track, or a Playlist.
``` rust ``` rust
enum CommentTargetType { enum CommentTarget {
Label, Label(LabelId),
Artist, Artist(ArtistId),
Album, Album(AlbumId),
Track, Track(TrackId),
Playlist, Playlist(PlaylistId),
Article, Article(ArticleId),
Comment, Comment(CommentId),
}
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>,
} }
struct CommentId { struct CommentId {
id: String, id: String,
@ -313,8 +302,7 @@ struct CommentId {
struct Comment { struct Comment {
id: CommentId, id: CommentId,
body: String, body: String,
target_type: CommentTargetType, target: CommentTarget,
target_id: CommentTargetId,
created_by: PersonId, created_by: PersonId,
created_at: chrono::DateTime, created_at: chrono::DateTime,
modified_by: Option<PersonId>, modified_by: Option<PersonId>,
@ -405,7 +393,6 @@ struct Collection {
albums: Option<Vec<Album>>, albums: Option<Vec<Album>>,
tracks: Option<Vec<Track>>, tracks: Option<Vec<Track>>,
other_products: Option<Vec<OtherProduct>>, other_products: Option<Vec<OtherProduct>>,
price: Option<rusty_money::Money>,
} }
``` ```
@ -429,7 +416,7 @@ struct OtherProduct {
is_available: bool, is_available: bool,
deleted_by: Option<PersonId>, deleted_by: Option<PersonId>,
deleted_at: Option<chrono::DateTime>, 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 ``` rust
enum PurchaseItemType { enum PurchaseItemType {
Album, Album(AlbumId),
Track, Track(TrackId),
Collection, Collection(CollectionId),
OtherProduct, OtherProduct(OtherProductId),
} }
struct PurchaseItemId { struct PurchaseItemId {
id: String, id: String,
@ -452,18 +439,15 @@ struct SkuId {
} }
struct Sku { struct Sku {
id: SkuId, id: SkuId,
album_id: Option<AlbumId>, item: PurchaseItemType,
track_id: Option<TrackId>,
collection_id: Option<CollectionId>,
other_product_id: Option<OtherProductId>,
variant: Option<String>, variant: Option<String>,
discount_percentage: Option<f64>, description: Option<String>,
discount_flatrate: Option<rusty_money::Money>, price: Option<rusty_money::Money>,
requires_shipping: bool,
} }
struct PurchaseItem { struct PurchaseItem {
id: PurchaseItemId, id: PurchaseItemId,
type: PurchaseItemType, sku: SkuId,
sku: Option<SkuId>,
quantity: usize, quantity: usize,
} }
enum PurchaseState { enum PurchaseState {
@ -481,5 +465,35 @@ struct Purchase {
state: PurchaseState, state: PurchaseState,
purchased_by: Person, purchased_by: Person,
purchased_at: Option<chrono::DateTime>, 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>,
}
```