Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/user table single #63

Merged
merged 5 commits into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions src/alembic/versions/2023_11_18_0135-8bd32b7bb552_.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
"""empty message

Revision ID: 8bd32b7bb552
Revises: 6846ef0ccd9a
Create Date: 2023-11-18 01:35:08.890257

"""
from typing import Sequence, Union

import sqlalchemy as sa

from alembic import op


# revision identifiers, used by Alembic.
revision: str = "8bd32b7bb552"
down_revision: Union[str, None] = "6846ef0ccd9a"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_table(
"user",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("name", sa.String(), nullable=False),
sa.Column("line_channel_id", sa.String(), nullable=True),
sa.PrimaryKeyConstraint("id"),
)
# ### end Alembic commands ###


def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table("user")
# ### end Alembic commands ###
6 changes: 4 additions & 2 deletions src/kb_2315/backend/api/endpoints/line.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from linebot.v3.webhooks.models.source import Source

from kb_2315 import notify
from kb_2315.backend.crud import crud_session
from kb_2315.backend.crud import crud_session, crud_user
from kb_2315.config import conf


Expand Down Expand Up @@ -90,6 +90,8 @@ async def handle_callback(request: Request) -> Literal["OK"]:
pass
else:
# 普通に話しかけらた
pass
if em := event.message:
if em.text == "hack": # type: ignore
crud_user.set_line_channel_id_by_user_id(user_id=1, line_channel_id=return_id)

return "OK"
3 changes: 2 additions & 1 deletion src/kb_2315/backend/crud/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from .crud_sensor import crud_sensor
from .crud_session import crud_session
from .crud_shoe import crud_shoe
from .crud_user import crud_user


__all__: list[str] = ["crud_sensor", "crud_session", "crud_shoe"]
__all__: list[str] = ["crud_sensor", "crud_session", "crud_shoe", "crud_user"]
45 changes: 45 additions & 0 deletions src/kb_2315/backend/crud/crud_user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from uuid import uuid4

from sqlalchemy.orm import Query

from kb_2315.backend.models import User

from .base_crud import base_CRUD


class CRUD_User(base_CRUD):
def add_user(self, name: str = f"User-{str(uuid4())[:8]}") -> int:
new_user = User()
new_user.name = name

with self._Session() as session:
session.add(new_user)
session.commit()

return new_user.id

def search_user_by(
self,
user_id: int | None = None,
name: str | None = None,
) -> list[User]:
with self._Session() as session:
query: Query[User] = session.query(User)

if name is not None:
query = query.filter(User.name.like(f"%{name}%"))
if user_id is not None:
query = query.filter(User.id == user_id)

return query.all()

def set_line_channel_id_by_user_id(self, user_id: int, line_channel_id: str) -> None:
with self._Session() as session:
u: User | None = session.query(User).filter(User.id == user_id).first()

if u is not None:
u.line_channel_id = line_channel_id
session.commit()


crud_user = CRUD_User()
3 changes: 2 additions & 1 deletion src/kb_2315/backend/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from .model_sensor import Sensor
from .model_session import Session
from .model_shoe import Shoe
from .model_user import User


__all__: list[str] = ["Sensor", "Shoe", "Session"]
__all__: list[str] = ["Sensor", "Shoe", "Session", "User"]
10 changes: 10 additions & 0 deletions src/kb_2315/backend/models/model_user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from sqlalchemy import Integer, String
from sqlalchemy.orm import Mapped, mapped_column

from kb_2315.backend.db.base import Base


class User(Base):
id: Mapped[int] = mapped_column(Integer, primary_key=True)
name: Mapped[str] = mapped_column(String, default="Taro")
line_channel_id: Mapped[str] = mapped_column(String, nullable=True)
1 change: 0 additions & 1 deletion src/kb_2315/config/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
class env:
line_channel_access_token: str = ""
line_channel_secret: str = ""
line_group_id: str = ""
host_url: str = ""

USE_EXTERNAL_DB: bool = False
Expand Down
11 changes: 7 additions & 4 deletions src/kb_2315/notify/line.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@
TextSendMessage,
)

from kb_2315.backend.crud import crud_shoe
from kb_2315.backend.crud import crud_shoe, crud_user
from kb_2315.backend.models import Shoe
from kb_2315.config import conf


line_channel_id: str = crud_user.search_user_by()[0].line_channel_id


def send_message(
message: str,
send_to_id: str = conf.line_group_id,
send_to_id: str = line_channel_id,
) -> None:
line_bot_api = LineBotApi(conf.line_channel_access_token)

Expand All @@ -30,7 +33,7 @@ def send_message(
print(f"Send Message Error:\n{e}")


def shoe_list_carousel(send_to_id: str = conf.line_group_id) -> None:
def shoe_list_carousel(send_to_id: str = line_channel_id) -> None:
columns_list: list[CarouselColumn] = []
shoes: list[Shoe] = crud_shoe.search_shoe_by()

Expand Down Expand Up @@ -59,7 +62,7 @@ def shoe_list_carousel(send_to_id: str = conf.line_group_id) -> None:
print(f"LineBotApiError: {e}")


def shoe_select_carousel(send_to_id: str = conf.line_group_id, session_id: UUID | None = None) -> None:
def shoe_select_carousel(send_to_id: str = line_channel_id, session_id: UUID | None = None) -> None:
columns_list: list[CarouselColumn] = []
shoes: list[Shoe] = crud_shoe.search_shoe_by()

Expand Down