mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
feat: products crud
This commit is contained in:
parent
7d81afc396
commit
4c8cb42978
12 changed files with 677 additions and 39 deletions
|
|
@ -1,21 +1,22 @@
|
|||
from datetime import datetime
|
||||
from enum import Enum
|
||||
from typing import Literal, Optional
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy import JSON
|
||||
from sqlmodel import Field, SQLModel, Column, BigInteger, ForeignKey
|
||||
|
||||
|
||||
# Stripe provider config
|
||||
class StripeProviderConfig(BaseModel):
|
||||
stripe_key: str = ""
|
||||
stripe_secret_key: str = ""
|
||||
stripe_webhook_secret: str = ""
|
||||
|
||||
# PaymentsConfig
|
||||
class PaymentProviderEnum(str, Enum):
|
||||
STRIPE = "stripe"
|
||||
|
||||
class PaymentsConfigBase(SQLModel):
|
||||
enabled: bool = False
|
||||
enabled: bool = True
|
||||
provider: PaymentProviderEnum = PaymentProviderEnum.STRIPE
|
||||
provider_config: dict = Field(default={}, sa_column=Column(JSON))
|
||||
|
||||
|
|
@ -34,7 +35,7 @@ class PaymentsConfigCreate(PaymentsConfigBase):
|
|||
|
||||
|
||||
class PaymentsConfigUpdate(PaymentsConfigBase):
|
||||
enabled: Optional[bool] = False
|
||||
enabled: Optional[bool] = True
|
||||
provider_config: Optional[dict] = None
|
||||
|
||||
|
||||
|
|
@ -46,4 +47,4 @@ class PaymentsConfigRead(PaymentsConfigBase):
|
|||
|
||||
|
||||
class PaymentsConfigDelete(SQLModel):
|
||||
id: int
|
||||
id: int
|
||||
14
apps/api/src/db/payments/payments_courses.py
Normal file
14
apps/api/src/db/payments/payments_courses.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
from enum import Enum
|
||||
from sqlmodel import SQLModel, Field, Column, BigInteger, ForeignKey, String, JSON
|
||||
from typing import Optional
|
||||
from datetime import datetime
|
||||
|
||||
class PaymentCourseBase(SQLModel):
|
||||
course_id: int = Field(sa_column=Column(BigInteger, ForeignKey("course.id", ondelete="CASCADE")))
|
||||
payment_product_id: int = Field(sa_column=Column(BigInteger, ForeignKey("paymentsproduct.id", ondelete="CASCADE")))
|
||||
org_id: int = Field(sa_column=Column(BigInteger, ForeignKey("organization.id", ondelete="CASCADE")))
|
||||
|
||||
class PaymentCourse(PaymentCourseBase, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
creation_date: datetime = Field(default=datetime.now())
|
||||
update_date: datetime = Field(default=datetime.now())
|
||||
38
apps/api/src/db/payments/payments_products.py
Normal file
38
apps/api/src/db/payments/payments_products.py
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
from enum import Enum
|
||||
from sqlmodel import SQLModel, Field, Column, BigInteger, ForeignKey, String, JSON
|
||||
from typing import Optional
|
||||
from datetime import datetime
|
||||
|
||||
class PaymentProductTypeEnum(str, Enum):
|
||||
SUBSCRIPTION = "subscription"
|
||||
ONE_TIME = "one_time"
|
||||
|
||||
class PaymentsProductBase(SQLModel):
|
||||
name: str = ""
|
||||
description: Optional[str] = ""
|
||||
product_type: PaymentProductTypeEnum = PaymentProductTypeEnum.ONE_TIME
|
||||
benefits: str = ""
|
||||
amount: float = 0.0
|
||||
|
||||
class PaymentsProduct(PaymentsProductBase, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
org_id: int = Field(
|
||||
sa_column=Column(BigInteger, ForeignKey("organization.id", ondelete="CASCADE"))
|
||||
)
|
||||
payments_config_id: int = Field(sa_column=Column(BigInteger, ForeignKey("paymentsconfig.id", ondelete="CASCADE")))
|
||||
provider_product_id: str = Field(sa_column=Column(String))
|
||||
creation_date: datetime = Field(default=datetime.now())
|
||||
update_date: datetime = Field(default=datetime.now())
|
||||
|
||||
class PaymentsProductCreate(PaymentsProductBase):
|
||||
pass
|
||||
|
||||
class PaymentsProductUpdate(PaymentsProductBase):
|
||||
pass
|
||||
|
||||
class PaymentsProductRead(PaymentsProductBase):
|
||||
id: int
|
||||
org_id: int
|
||||
payments_config_id: int
|
||||
creation_date: datetime
|
||||
update_date: datetime
|
||||
19
apps/api/src/db/payments/payments_users.py
Normal file
19
apps/api/src/db/payments/payments_users.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
from enum import Enum
|
||||
from sqlmodel import SQLModel, Field, Column, BigInteger, ForeignKey, String, JSON
|
||||
from typing import Optional
|
||||
from datetime import datetime
|
||||
|
||||
class PaymentUserStatusEnum(str, Enum):
|
||||
ACTIVE = "active"
|
||||
INACTIVE = "inactive"
|
||||
|
||||
class PaymentsUserBase(SQLModel):
|
||||
user_id: int = Field(sa_column=Column(BigInteger, ForeignKey("user.id", ondelete="CASCADE")))
|
||||
status: PaymentUserStatusEnum = PaymentUserStatusEnum.ACTIVE
|
||||
payment_product_id: int = Field(sa_column=Column(BigInteger, ForeignKey("paymentsproduct.id", ondelete="CASCADE")))
|
||||
org_id: int = Field(sa_column=Column(BigInteger, ForeignKey("organization.id", ondelete="CASCADE")))
|
||||
|
||||
class PaymentsUser(PaymentsUserBase, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
creation_date: datetime = Field(default=datetime.now())
|
||||
update_date: datetime = Field(default=datetime.now())
|
||||
Loading…
Add table
Add a link
Reference in a new issue