From 783a6db9ccfb12da655b1d7908f6716e6d2fb26a Mon Sep 17 00:00:00 2001 From: Nickolashaa Date: Sat, 5 Sep 2026 00:38:15 +0300 Subject: [PATCH 1/5] server:remove field type from message --- ...09_04_2137-0704ea73d326_u_messages_type.py | 41 +++++++++++++++++++ server/src/server/database/models/messages.py | 2 - server/src/server/enums/messages.py | 5 --- .../graphql/schema/messages/mutations.py | 1 - .../server/graphql/types/messages/__init__.py | 2 - .../server/graphql/types/messages/enums.py | 5 --- .../server/graphql/types/messages/inputs.py | 10 +---- .../server/graphql/types/messages/types.py | 3 -- server/src/server/scripts/seed_data.py | 2 - .../src/server/services/messages/schemas.py | 3 -- .../src/server/services/messages/service.py | 3 -- server/src/server/services/messages/types.py | 4 -- 12 files changed, 42 insertions(+), 39 deletions(-) create mode 100644 server/src/server/database/alembic/versions/2026_09_04_2137-0704ea73d326_u_messages_type.py delete mode 100644 server/src/server/enums/messages.py delete mode 100644 server/src/server/graphql/types/messages/enums.py diff --git a/server/src/server/database/alembic/versions/2026_09_04_2137-0704ea73d326_u_messages_type.py b/server/src/server/database/alembic/versions/2026_09_04_2137-0704ea73d326_u_messages_type.py new file mode 100644 index 0000000..e3e743e --- /dev/null +++ b/server/src/server/database/alembic/versions/2026_09_04_2137-0704ea73d326_u_messages_type.py @@ -0,0 +1,41 @@ +"""u_messages_type + +Revision ID: 0704ea73d326 +Revises: c5f6674663cc +Create Date: 2026-09-04 21:37:50.487133 + +""" + +from typing import Sequence, Union + +import sqlalchemy as sa +from alembic import op +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision: str = "0704ea73d326" +down_revision: Union[str, Sequence[str], None] = "c5f6674663cc" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column("messages", "type") + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.add_column( + "messages", + sa.Column( + "type", + postgresql.ENUM("TEXT", name="messagetype"), + autoincrement=False, + nullable=False, + ), + ) + # ### end Alembic commands ### diff --git a/server/src/server/database/models/messages.py b/server/src/server/database/models/messages.py index ffa2cb1..fe8101b 100644 --- a/server/src/server/database/models/messages.py +++ b/server/src/server/database/models/messages.py @@ -1,7 +1,6 @@ from sqlalchemy import ForeignKey from sqlalchemy.orm import Mapped, mapped_column -from ...enums.messages import MessageType from ..connection import Base from .auth import User from .chats import Chat @@ -13,4 +12,3 @@ class Message(Base): chat_id: Mapped[int] = mapped_column(ForeignKey(Chat.id, ondelete="CASCADE")) user_id: Mapped[int] = mapped_column(ForeignKey(User.id, ondelete="CASCADE")) encrypted_text: Mapped[str] - type: Mapped[MessageType] diff --git a/server/src/server/enums/messages.py b/server/src/server/enums/messages.py deleted file mode 100644 index b1a3d4b..0000000 --- a/server/src/server/enums/messages.py +++ /dev/null @@ -1,5 +0,0 @@ -from enum import StrEnum - - -class MessageType(StrEnum): - TEXT = "TEXT" diff --git a/server/src/server/graphql/schema/messages/mutations.py b/server/src/server/graphql/schema/messages/mutations.py index 208a42e..d75d6c9 100644 --- a/server/src/server/graphql/schema/messages/mutations.py +++ b/server/src/server/graphql/schema/messages/mutations.py @@ -21,7 +21,6 @@ async def create_message( instance = await info.context.services.message_service.create( user_id=info.context.current_user.id, chat_id=input.chat_id, - type=input.type, text=input.text, ) await info.context.session.commit() diff --git a/server/src/server/graphql/types/messages/__init__.py b/server/src/server/graphql/types/messages/__init__.py index 8601668..bc3b565 100644 --- a/server/src/server/graphql/types/messages/__init__.py +++ b/server/src/server/graphql/types/messages/__init__.py @@ -1,10 +1,8 @@ -from .enums import EMessageType from .inputs import MessageFiltersIn, MessageIn from .types import Message, MessagesMeta __all__ = ( "Message", - "EMessageType", "MessagesMeta", "MessageFiltersIn", "MessageIn", diff --git a/server/src/server/graphql/types/messages/enums.py b/server/src/server/graphql/types/messages/enums.py deleted file mode 100644 index 33f61c8..0000000 --- a/server/src/server/graphql/types/messages/enums.py +++ /dev/null @@ -1,5 +0,0 @@ -import strawberry - -from ....enums.messages import MessageType - -EMessageType = strawberry.enum(MessageType, name="EMessageType") diff --git a/server/src/server/graphql/types/messages/inputs.py b/server/src/server/graphql/types/messages/inputs.py index 1b06cce..790e7ee 100644 --- a/server/src/server/graphql/types/messages/inputs.py +++ b/server/src/server/graphql/types/messages/inputs.py @@ -1,25 +1,17 @@ import strawberry from ....services.messages.types import MessageGetListFilters -from .enums import EMessageType @strawberry.input class MessageFiltersIn: chat_id: int - type: strawberry.Maybe[EMessageType] def to_service_params(self) -> MessageGetListFilters: - params: MessageGetListFilters = {"chat_id": self.chat_id} - - if self.type is not None: - params["type"] = self.type.value - - return params + return MessageGetListFilters(chat_id=self.chat_id) @strawberry.input class MessageIn: chat_id: int - type: EMessageType text: str diff --git a/server/src/server/graphql/types/messages/types.py b/server/src/server/graphql/types/messages/types.py index dfaffa4..cd44c0c 100644 --- a/server/src/server/graphql/types/messages/types.py +++ b/server/src/server/graphql/types/messages/types.py @@ -6,13 +6,11 @@ from ..auth import IUser from ..base import IBaseMeta, IBaseType from ..chats import IChat -from .enums import EMessageType @strawberry.type class Message(IBaseType, IUser, IChat): text: str - type: EMessageType @classmethod def from_schema(cls, instance: MessageResponse) -> Self: @@ -21,7 +19,6 @@ def from_schema(cls, instance: MessageResponse) -> Self: user_id=instance.user_id, chat_id=instance.chat_id, text=instance.text, - type=instance.type, created_at=instance.created_at, updated_at=instance.updated_at, ) diff --git a/server/src/server/scripts/seed_data.py b/server/src/server/scripts/seed_data.py index 5a0ca67..f9496f1 100644 --- a/server/src/server/scripts/seed_data.py +++ b/server/src/server/scripts/seed_data.py @@ -11,7 +11,6 @@ from ..database.models.chats import Chat, ChatParticipant from ..database.models.messages import Message from ..enums.chats import ChatType -from ..enums.messages import MessageType from ..enums.users import UserRole _TEST_DATA_PATH = Path(__file__).parent / "test_data.json" @@ -83,7 +82,6 @@ async def _seed_messages( chat_id=chats[chat_idx].id, user_id=users[user_idx].id, encrypted_text=fernet.encrypt(text.encode()).decode(), - type=MessageType.TEXT, ) for chat_idx, user_idx, text in _MESSAGES_INDEXES ] diff --git a/server/src/server/services/messages/schemas.py b/server/src/server/services/messages/schemas.py index 1b57a4f..d40b044 100644 --- a/server/src/server/services/messages/schemas.py +++ b/server/src/server/services/messages/schemas.py @@ -3,14 +3,12 @@ from cryptography.fernet import Fernet from ...database.models.messages import Message -from ...enums.messages import MessageType from ..base import BaseResponse class MessageResponse(BaseResponse): chat_id: int user_id: int - type: MessageType text: str @classmethod @@ -19,7 +17,6 @@ def from_ORM(cls, instance: Message, fernet: Fernet) -> Self: id=instance.id, chat_id=instance.chat_id, user_id=instance.user_id, - type=instance.type, text=fernet.decrypt(instance.encrypted_text.encode()).decode(), created_at=instance.created_at, updated_at=instance.updated_at, diff --git a/server/src/server/services/messages/service.py b/server/src/server/services/messages/service.py index a841ee6..6529ca6 100644 --- a/server/src/server/services/messages/service.py +++ b/server/src/server/services/messages/service.py @@ -63,9 +63,6 @@ def _apply_filters( if (chat_ids := filters.get("chat_ids")) is not None: stmt = stmt.where(Message.chat_id.in_(chat_ids)) - if (type := filters.get("type")) is not None: - stmt = stmt.where(Message.type == type) - return stmt async def get_list( diff --git a/server/src/server/services/messages/types.py b/server/src/server/services/messages/types.py index 83f7098..400d959 100644 --- a/server/src/server/services/messages/types.py +++ b/server/src/server/services/messages/types.py @@ -1,16 +1,12 @@ from typing import NotRequired, Required, TypedDict -from ...enums.messages import MessageType - class MessageGetListFilters(TypedDict): chat_id: NotRequired[int] chat_ids: NotRequired[list[int]] - type: NotRequired[MessageType] class MessageCreateParams(TypedDict): chat_id: Required[int] user_id: Required[int] - type: Required[MessageType] text: Required[str] From 577c12f23264f8353d0d83dc31dce2c338093780 Mon Sep 17 00:00:00 2001 From: Nickolashaa Date: Sat, 5 Sep 2026 00:38:32 +0300 Subject: [PATCH 2/5] server:schemagen --- server/schema.graphql | 7 ------- 1 file changed, 7 deletions(-) diff --git a/server/schema.graphql b/server/schema.graphql index ecf3fea..d879492 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -62,10 +62,6 @@ enum EChatType { PUBLIC } -enum EMessageType { - TEXT -} - enum EUserRole { STUDENT TEACHER @@ -113,17 +109,14 @@ type Message implements IBaseType & IUser & IChat { user: User! chat: Chat! text: String! - type: EMessageType! } input MessageFiltersIn { chatId: Int! - type: EMessageType } input MessageIn { chatId: Int! - type: EMessageType! text: String! } From 8c9fce9d28d88dafc07aa8fa7796e23780c54e26 Mon Sep 17 00:00:00 2001 From: Nickolashaa Date: Sat, 5 Sep 2026 00:39:11 +0300 Subject: [PATCH 3/5] client:codegen --- client/src/graphql/base-types.ts | 7 ------- client/src/graphql/fragments/messages.generated.ts | 10 +--------- client/src/graphql/fragments/messages.gql | 1 - .../mutations/chats/create-private-chat.generated.ts | 3 --- .../mutations/chats/create-public-chat.generated.ts | 3 --- .../mutations/messages/create-message.generated.ts | 4 ---- client/src/graphql/queries/chats/me-chats.generated.ts | 3 --- .../src/graphql/queries/messages/messages.generated.ts | 4 ---- client/src/graphql/subscriptions/events.generated.ts | 3 --- 9 files changed, 1 insertion(+), 37 deletions(-) diff --git a/client/src/graphql/base-types.ts b/client/src/graphql/base-types.ts index 33314b8..9b1a9e4 100644 --- a/client/src/graphql/base-types.ts +++ b/client/src/graphql/base-types.ts @@ -82,10 +82,6 @@ export enum EChatType { Public = "PUBLIC", } -export enum EMessageType { - Text = "TEXT", -} - export enum EUserRole { Student = "STUDENT", Teacher = "TEACHER", @@ -137,20 +133,17 @@ export type Message = IBaseType & createdAt: Scalars["DateTime"]["output"] id: Scalars["Int"]["output"] text: Scalars["String"]["output"] - type: EMessageType updatedAt: Scalars["DateTime"]["output"] user: User } export type MessageFiltersIn = { chatId: Scalars["Int"]["input"] - type?: InputMaybe } export type MessageIn = { chatId: Scalars["Int"]["input"] text: Scalars["String"]["input"] - type: EMessageType } export type MessageObjectNotFoundError = Message | ObjectNotFoundError diff --git a/client/src/graphql/fragments/messages.generated.ts b/client/src/graphql/fragments/messages.generated.ts index f335257..ccc8c50 100644 --- a/client/src/graphql/fragments/messages.generated.ts +++ b/client/src/graphql/fragments/messages.generated.ts @@ -4,20 +4,12 @@ export type Incremental = import * as Types from "../base-types" import gql from "graphql-tag" -export type EMessageType = "TEXT" - -export type MessageFieldsFragment = { - id: number - createdAt: string - text: string - type: Types.EMessageType -} +export type MessageFieldsFragment = { id: number; createdAt: string; text: string } export const MessageFieldsFragmentDoc = gql` fragment MessageFields on Message { id createdAt text - type } ` diff --git a/client/src/graphql/fragments/messages.gql b/client/src/graphql/fragments/messages.gql index 1d3efc3..3148d72 100644 --- a/client/src/graphql/fragments/messages.gql +++ b/client/src/graphql/fragments/messages.gql @@ -2,5 +2,4 @@ fragment MessageFields on Message { id createdAt text - type } diff --git a/client/src/graphql/mutations/chats/create-private-chat.generated.ts b/client/src/graphql/mutations/chats/create-private-chat.generated.ts index 92a7296..7b18320 100644 --- a/client/src/graphql/mutations/chats/create-private-chat.generated.ts +++ b/client/src/graphql/mutations/chats/create-private-chat.generated.ts @@ -14,8 +14,6 @@ import * as VueCompositionApi from "vue" export type ReactiveFunction = () => TParam export type EChatType = "PRIVATE" | "PUBLIC" -export type EMessageType = "TEXT" - export type EUserRole = "STUDENT" | "TEACHER" export type PrivateChatIn = { @@ -55,7 +53,6 @@ export type CreatePrivateChatMutation = { id: number createdAt: string text: string - type: Types.EMessageType user: { id: number createdAt: string diff --git a/client/src/graphql/mutations/chats/create-public-chat.generated.ts b/client/src/graphql/mutations/chats/create-public-chat.generated.ts index e5dac59..49eaea7 100644 --- a/client/src/graphql/mutations/chats/create-public-chat.generated.ts +++ b/client/src/graphql/mutations/chats/create-public-chat.generated.ts @@ -14,8 +14,6 @@ import * as VueCompositionApi from "vue" export type ReactiveFunction = () => TParam export type EChatType = "PRIVATE" | "PUBLIC" -export type EMessageType = "TEXT" - export type EUserRole = "STUDENT" | "TEACHER" export type PublicChatIn = { @@ -56,7 +54,6 @@ export type CreatePublicChatMutation = { id: number createdAt: string text: string - type: Types.EMessageType user: { id: number createdAt: string diff --git a/client/src/graphql/mutations/messages/create-message.generated.ts b/client/src/graphql/mutations/messages/create-message.generated.ts index 4ef2444..f5077d3 100644 --- a/client/src/graphql/mutations/messages/create-message.generated.ts +++ b/client/src/graphql/mutations/messages/create-message.generated.ts @@ -11,14 +11,11 @@ import { UserFieldsFragmentDoc } from "../../fragments/auth.generated" import * as VueApolloComposable from "@vue/apollo-composable" import * as VueCompositionApi from "vue" export type ReactiveFunction = () => TParam -export type EMessageType = "TEXT" - export type EUserRole = "STUDENT" | "TEACHER" export type MessageIn = { chatId: number text: string - type: EMessageType } export type CreateMessageMutationVariables = Exact<{ @@ -32,7 +29,6 @@ export type CreateMessageMutation = { id: number createdAt: string text: string - type: Types.EMessageType user: { id: number createdAt: string diff --git a/client/src/graphql/queries/chats/me-chats.generated.ts b/client/src/graphql/queries/chats/me-chats.generated.ts index c80dabd..3bfc1d5 100644 --- a/client/src/graphql/queries/chats/me-chats.generated.ts +++ b/client/src/graphql/queries/chats/me-chats.generated.ts @@ -23,8 +23,6 @@ export type ChatFiltersIn = { export type EChatType = "PRIVATE" | "PUBLIC" -export type EMessageType = "TEXT" - export type EUserRole = "STUDENT" | "TEACHER" export type MeChatsQueryVariables = Exact<{ @@ -63,7 +61,6 @@ export type MeChatsQuery = { id: number createdAt: string text: string - type: Types.EMessageType user: { id: number createdAt: string diff --git a/client/src/graphql/queries/messages/messages.generated.ts b/client/src/graphql/queries/messages/messages.generated.ts index 5e7940d..a9f2b39 100644 --- a/client/src/graphql/queries/messages/messages.generated.ts +++ b/client/src/graphql/queries/messages/messages.generated.ts @@ -16,13 +16,10 @@ export type BasePaginationIn = { offset?: number | null | undefined } -export type EMessageType = "TEXT" - export type EUserRole = "STUDENT" | "TEACHER" export type MessageFiltersIn = { chatId: number - type?: EMessageType | null | undefined } export type MessagesQueryVariables = Exact<{ @@ -37,7 +34,6 @@ export type MessagesQuery = { id: number createdAt: string text: string - type: Types.EMessageType user: { id: number createdAt: string diff --git a/client/src/graphql/subscriptions/events.generated.ts b/client/src/graphql/subscriptions/events.generated.ts index a30331d..81f8709 100644 --- a/client/src/graphql/subscriptions/events.generated.ts +++ b/client/src/graphql/subscriptions/events.generated.ts @@ -11,8 +11,6 @@ import { UserFieldsFragmentDoc } from "../fragments/auth.generated" import * as VueApolloComposable from "@vue/apollo-composable" import * as VueCompositionApi from "vue" export type ReactiveFunction = () => TParam -export type EMessageType = "TEXT" - export type EUserRole = "STUDENT" | "TEACHER" export type EventsSubscriptionVariables = Exact<{ [key: string]: never }> @@ -22,7 +20,6 @@ export type EventsSubscription = { id: number createdAt: string text: string - type: Types.EMessageType user: { id: number createdAt: string From 69c07bca1360abf91e9fa5a6609098cab97d92d9 Mon Sep 17 00:00:00 2001 From: Nickolashaa Date: Sat, 5 Sep 2026 00:42:05 +0300 Subject: [PATCH 4/5] server:fix service --- server/src/server/services/messages/service.py | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/server/services/messages/service.py b/server/src/server/services/messages/service.py index 6529ca6..12f7734 100644 --- a/server/src/server/services/messages/service.py +++ b/server/src/server/services/messages/service.py @@ -30,7 +30,6 @@ async def create( .values( chat_id=values.get("chat_id"), user_id=values.get("user_id"), - type=values.get("type"), encrypted_text=self._fernet.encrypt( values.get("text").encode() ).decode(), From 21216622bbb1e49a0348a4e7b7e8c70cca691d54 Mon Sep 17 00:00:00 2001 From: Nickolashaa Date: Sat, 5 Sep 2026 00:42:46 +0300 Subject: [PATCH 5/5] client:fix store --- client/src/stores/messages.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/src/stores/messages.ts b/client/src/stores/messages.ts index e60fdad..b93a1bd 100644 --- a/client/src/stores/messages.ts +++ b/client/src/stores/messages.ts @@ -5,7 +5,6 @@ import { CreateMessageDocument } from "@/graphql/mutations/messages/create-messa import { MessagesDocument } from "@/graphql/queries/messages/messages.generated" import type { MessageFieldsFragment } from "@/graphql/fragments/messages.generated" import type { UserFieldsFragment } from "@/graphql/fragments/auth.generated" -import { EMessageType } from "@/graphql/base-types" export type MessageItem = MessageFieldsFragment & { user: UserFieldsFragment } @@ -49,7 +48,7 @@ export const useMessageStore = defineStore("messages", () => { const { data } = await apolloClient.mutate({ mutation: CreateMessageDocument, - variables: { input: { chatId: chatId.value, type: EMessageType.Text, text } }, + variables: { input: { chatId: chatId.value, text } }, }) if (data === undefined || data === null || data.createMessage.__typename !== "Message") {