Procházet zdrojové kódy

Feature/add is deleted to conversations (#470)

tags/0.3.6
crazywoola před 2 roky
rodič
revize
97e9ebd29a
Žádný účet není propojen s e-mailovou adresou tvůrce revize

+ 41
- 0
api/controllers/console/app/conversation.py Zobrazit soubor

conversation_id = str(conversation_id) conversation_id = str(conversation_id)


return _get_conversation(app_id, conversation_id, 'completion') return _get_conversation(app_id, conversation_id, 'completion')
@setup_required
@login_required
@account_initialization_required
def delete(self, app_id, conversation_id):
app_id = str(app_id)
conversation_id = str(conversation_id)

app = _get_app(app_id, 'chat')

conversation = db.session.query(Conversation) \
.filter(Conversation.id == conversation_id, Conversation.app_id == app.id).first()

if not conversation:
raise NotFound("Conversation Not Exists.")

conversation.is_deleted = True
db.session.commit()

return {'result': 'success'}, 204




class ChatConversationApi(Resource): class ChatConversationApi(Resource):
conversation_id = str(conversation_id) conversation_id = str(conversation_id)


return _get_conversation(app_id, conversation_id, 'chat') return _get_conversation(app_id, conversation_id, 'chat')
@setup_required
@login_required
@account_initialization_required
def delete(self, app_id, conversation_id):
app_id = str(app_id)
conversation_id = str(conversation_id)

# get app info
app = _get_app(app_id, 'chat')

conversation = db.session.query(Conversation) \
.filter(Conversation.id == conversation_id, Conversation.app_id == app.id).first()

if not conversation:
raise NotFound("Conversation Not Exists.")

conversation.is_deleted = True
db.session.commit()

return {'result': 'success'}, 204







+ 21
- 0
api/controllers/service_api/app/conversation.py Zobrazit soubor

except services.errors.conversation.LastConversationNotExistsError: except services.errors.conversation.LastConversationNotExistsError:
raise NotFound("Last Conversation Not Exists.") raise NotFound("Last Conversation Not Exists.")


class ConversationDetailApi(AppApiResource):
@marshal_with(conversation_fields)
def delete(self, app_model, end_user, c_id):
if app_model.mode != 'chat':
raise NotChatAppError()

conversation_id = str(c_id)

parser = reqparse.RequestParser()
parser.add_argument('user', type=str, location='args')
args = parser.parse_args()

if end_user is None and args['user'] is not None:
end_user = create_or_update_end_user_for_user_id(app_model, args['user'])

try:
ConversationService.delete(app_model, conversation_id, end_user)
return {"result": "success"}, 204
except services.errors.conversation.ConversationNotExistsError:
raise NotFound("Conversation Not Exists.")


class ConversationRenameApi(AppApiResource): class ConversationRenameApi(AppApiResource):




api.add_resource(ConversationRenameApi, '/conversations/<uuid:c_id>/name', endpoint='conversation_name') api.add_resource(ConversationRenameApi, '/conversations/<uuid:c_id>/name', endpoint='conversation_name')
api.add_resource(ConversationApi, '/conversations') api.add_resource(ConversationApi, '/conversations')
api.add_resource(ConversationApi, '/conversations/<uuid:c_id>', endpoint='conversation')

+ 32
- 0
api/migrations/versions/d3d503a3471c_add_is_deleted_to_conversations.py Zobrazit soubor

"""add is_deleted to conversations

Revision ID: d3d503a3471c
Revises: e32f6ccb87c6
Create Date: 2023-06-27 19:13:30.897981

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = 'd3d503a3471c'
down_revision = 'e32f6ccb87c6'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('conversations', schema=None) as batch_op:
batch_op.add_column(sa.Column('is_deleted', sa.Boolean(), server_default=sa.text('false'), nullable=False))

# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('conversations', schema=None) as batch_op:
batch_op.drop_column('is_deleted')

# ### end Alembic commands ###

+ 2
- 0
api/models/model.py Zobrazit soubor

messages = db.relationship("Message", backref="conversation", lazy='select', passive_deletes="all") messages = db.relationship("Message", backref="conversation", lazy='select', passive_deletes="all")
message_annotations = db.relationship("MessageAnnotation", backref="conversation", lazy='select', passive_deletes="all") message_annotations = db.relationship("MessageAnnotation", backref="conversation", lazy='select', passive_deletes="all")


is_deleted = db.Column(db.Boolean, nullable=False, server_default=db.text('false'))

@property @property
def model_config(self): def model_config(self):
model_config = {} model_config = {}

+ 3
- 1
api/services/conversation_service.py Zobrazit soubor

return InfiniteScrollPagination(data=[], limit=limit, has_more=False) return InfiniteScrollPagination(data=[], limit=limit, has_more=False)


base_query = db.session.query(Conversation).filter( base_query = db.session.query(Conversation).filter(
Conversation.is_deleted == False,
Conversation.app_id == app_model.id, Conversation.app_id == app_model.id,
Conversation.from_source == ('api' if isinstance(user, EndUser) else 'console'), Conversation.from_source == ('api' if isinstance(user, EndUser) else 'console'),
Conversation.from_end_user_id == (user.id if isinstance(user, EndUser) else None), Conversation.from_end_user_id == (user.id if isinstance(user, EndUser) else None),
Conversation.from_source == ('api' if isinstance(user, EndUser) else 'console'), Conversation.from_source == ('api' if isinstance(user, EndUser) else 'console'),
Conversation.from_end_user_id == (user.id if isinstance(user, EndUser) else None), Conversation.from_end_user_id == (user.id if isinstance(user, EndUser) else None),
Conversation.from_account_id == (user.id if isinstance(user, Account) else None), Conversation.from_account_id == (user.id if isinstance(user, Account) else None),
Conversation.is_deleted == False
).first() ).first()


if not conversation: if not conversation:
def delete(cls, app_model: App, conversation_id: str, user: Optional[Union[Account | EndUser]]): def delete(cls, app_model: App, conversation_id: str, user: Optional[Union[Account | EndUser]]):
conversation = cls.get_conversation(app_model, conversation_id, user) conversation = cls.get_conversation(app_model, conversation_id, user)


db.session.delete(conversation)
conversation.is_deleted = True
db.session.commit() db.session.commit()

Načítá se…
Zrušit
Uložit