Skip to content

Commit 53d7fc0

Browse files
committed
📃 msg: add favorite messages quick copy
1 parent 968b0dd commit 53d7fc0

File tree

4 files changed

+396
-12
lines changed

4 files changed

+396
-12
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ fastapi dev main.py
4343

4444
| Feature | Description | Status |
4545
| ---------------------- | -------------------------------------------------------- | -------------------- |
46-
| Conversation Cleanup | Auto-delete conversations after x months of inactivity | ✅ Done |
46+
| English translation | Add a language switcher button + i18n translations | ⚠️ Not Planned |
47+
| Conversation Cleanup | Auto-delete conversations after x months of inactivity | ✅ Done |
4748
| Ad Refresh | Automatic refreshing of listings | ⚒️ Under Refactoring |
48-
| Sales Analytics | Export transactions, generate graphs & statistics | ✅ Done |
49-
| Annual Reports | Yearly compatible reporting system | 📝 To Be Done |
50-
| Favorite Messages | Quick-copy system for 5 favorite messages | 📝 To Be Done |
49+
| Sales Analytics | Export transactions, generate graphs & statistics | ✅ Done |
50+
| Favorite Messages | Quick-copy system for 5 favorite messages | ✅ Done |
5151
| Publication Menu | Database-linked posting system with search functionality | 📝 To Be Done |
5252
| Shipping Labels | Automatic retrieval of shipping labels | ⚠️ Not Planned |
5353
| Thank You Messages | Add customizable thank-you messages on shipping labels | ⚠️ Not Planned |

backend/config/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,12 @@ class User(SQLModel, table=True):
4141
imapUsername: str | None = Field()
4242
imapPassword: str | None = Field()
4343
userId: int | None = Field()
44+
45+
46+
class FavoriteMessage(SQLModel, table=True):
47+
id: int | None = Field(default=None, primary_key=True)
48+
name: str = Field()
49+
message: str = Field()
50+
createdAt: datetime = Field()
51+
updatedAt: datetime | None = Field()
52+
userId: int = Field()

backend/routers/accounting.py

Lines changed: 121 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import datetime
22
from fastapi import APIRouter, Depends
33
from pydantic import BaseModel
4-
from sqlmodel import Session
4+
from sqlmodel import Session, select
55
from constants import API_URL
66
from utils import execute_request, get_vinted_headers
7-
from config.models import get_session
7+
from config.models import get_session, FavoriteMessage, User
88

99
router = APIRouter(
1010
prefix="/accounting",
@@ -15,10 +15,129 @@ class CleanConversations(BaseModel):
1515
monthsToKeep: int
1616

1717

18+
class AddFavoriteMessage(BaseModel):
19+
name: str
20+
message: str
21+
22+
23+
class DeleteFavoriteMessage(BaseModel):
24+
id: int
25+
26+
27+
class UpdateFavoriteMessage(BaseModel):
28+
id: int
29+
name: str
30+
message: str
31+
32+
1833
class ExportSalesData(BaseModel):
1934
period: str
2035

2136

37+
@router.get("/favorite-messages")
38+
def get_favorite_messages(
39+
session: Session = Depends(get_session),
40+
):
41+
user = session.exec(select(User).where(User.id == 1)).first()
42+
if not user:
43+
return {"success": False, "error": "User not found"}
44+
45+
messages = session.exec(
46+
select(FavoriteMessage)
47+
.where(FavoriteMessage.userId == user.userId)
48+
.order_by(FavoriteMessage.createdAt.desc())
49+
.limit(5)
50+
).all()
51+
52+
return {"success": True, "messages": messages}
53+
54+
55+
@router.post("/add-favorite-message")
56+
def add_favorite_message(
57+
add_favorite_message: AddFavoriteMessage,
58+
session: Session = Depends(get_session),
59+
):
60+
user = session.exec(select(User).where(User.id == 1)).first()
61+
if not user:
62+
return {"success": False, "error": "User not found"}
63+
64+
existing_count = session.exec(
65+
select(FavoriteMessage).where(FavoriteMessage.userId == user.userId)
66+
).all()
67+
68+
if len(existing_count) >= 5:
69+
return {"success": False, "error": "Maximum 5 favorite messages allowed"}
70+
71+
new_message = FavoriteMessage(
72+
name=add_favorite_message.name,
73+
message=add_favorite_message.message,
74+
userId=user.userId,
75+
createdAt=datetime.datetime.now(),
76+
updatedAt=datetime.datetime.now(),
77+
)
78+
79+
session.add(new_message)
80+
session.commit()
81+
session.refresh(new_message)
82+
83+
return {"success": True, "data": new_message}
84+
85+
86+
@router.delete("/delete-favorite-message")
87+
def delete_favorite_message(
88+
delete_favorite_message: DeleteFavoriteMessage,
89+
session: Session = Depends(get_session),
90+
):
91+
user = session.exec(select(User).where(User.id == 1)).first()
92+
if not user:
93+
return {"success": False, "error": "User not found"}
94+
95+
message = session.exec(
96+
select(FavoriteMessage).where(
97+
FavoriteMessage.id == delete_favorite_message.id,
98+
FavoriteMessage.userId == user.userId,
99+
)
100+
).first()
101+
102+
if not message:
103+
return {"success": False, "error": "Message not found"}
104+
105+
session.delete(message)
106+
session.commit()
107+
108+
return {"success": True, "message": "Message deleted successfully"}
109+
110+
111+
@router.patch("/update-favorite-message")
112+
def update_favorite_message(
113+
update_favorite_message: UpdateFavoriteMessage,
114+
session: Session = Depends(get_session),
115+
):
116+
user = session.exec(select(User).where(User.id == 1)).first()
117+
if not user:
118+
return {"success": False, "error": "User not found"}
119+
120+
message = session.exec(
121+
select(FavoriteMessage).where(
122+
FavoriteMessage.id == update_favorite_message.id,
123+
FavoriteMessage.userId == user.userId,
124+
)
125+
).first()
126+
127+
if not message:
128+
return {"success": False, "error": "Message not found"}
129+
130+
message.name = update_favorite_message.name
131+
message.message = update_favorite_message.message
132+
message.updatedAt = datetime.datetime.now()
133+
134+
session.add(message)
135+
session.commit()
136+
session.refresh(message)
137+
138+
return {"success": True, "data": message}
139+
140+
22141
def get_transactions_data(year, month, headers):
23142
page = 1
24143
url = f"{API_URL}wallet/invoices/{year}/{month}?page={page}"

0 commit comments

Comments
 (0)