changed db folder name

added codac to position enum
pull/231/head
Yariv Menachem 2025-01-05 16:15:50 +02:00
parent eb97fa136a
commit c1dabdb88a
11 changed files with 44 additions and 19 deletions

View File

@ -2,7 +2,7 @@ from typing import Optional, Union
from pydantic import BaseModel, Field
from db.Position import Position
from model.Position import Position
class User(BaseModel):

View File

View File

@ -0,0 +1,17 @@
from bson.codec_options import TypeCodec
from model.Position import Position
class PositionCodec(TypeCodec):
python_type = Position
bson_type = str
def transform_python(self, value):
return value.value
def transform_bson(self, value):
return Position(value)
position_codec = PositionCodec()

View File

@ -21,7 +21,7 @@ class JobRepository:
self = super().__new__(cls)
cls._instance = self
self.logger = create_logger("JobRepository")
self.collection = mongo_client.db["jobs"]
self.collection = mongo_client._db["jobs"]
return cls._instance
def find_by_id(self, job_id: str) -> Optional[JobPost]:

View File

@ -1,10 +1,12 @@
from typing import Optional
from bson.codec_options import TypeRegistry, CodecOptions
from dotenv import load_dotenv
from pymongo import UpdateOne
from jobspy import create_logger
from .User import User
from .codec.position_codec import position_codec
from .monogo_db import mongo_client
load_dotenv()
@ -21,7 +23,9 @@ class UserRepository:
self = super().__new__(cls)
cls._instance = self
self.logger = create_logger("UserRepository")
self.collection = mongo_client.db["user"]
type_registry = TypeRegistry([position_codec])
codec_options = CodecOptions(type_registry=type_registry)
self.collection = mongo_client.get_collection('user', codec_options=codec_options)
self.collection.create_index('username', unique=True)
return cls._instance
@ -99,4 +103,5 @@ class UserRepository:
return old_users, new_users
user_repository = UserRepository()
user_repository = UserRepository()

View File

@ -3,7 +3,7 @@ from __future__ import annotations
from telegram import MaybeInaccessibleMessage
from telegram.constants import ReactionEmoji
from db.job_repository import JobRepository
from model.job_repository import JobRepository
from jobspy import create_logger
from telegram_handler.button_callback.button_fire_strategy import FireStrategy
from telegram_handler.button_callback.button_job_title_strategy import JobTitleStrategy

View File

@ -1,7 +1,7 @@
from telegram import MaybeInaccessibleMessage
from telegram.constants import ReactionEmoji
from db.job_repository import JobRepository
from model.job_repository import JobRepository
from jobspy import create_logger
from telegram_bot import TelegramBot
from telegram_handler.button_callback.button_strategy import ButtonStrategy

View File

@ -4,7 +4,7 @@ from telegram.ext import (
ContextTypes,
)
from db.job_repository import JobRepository
from model.job_repository import JobRepository
from jobspy import Site, scrape_jobs, JobPost
from jobspy.scrapers.utils import create_logger
from telegram_bot import TelegramBot

View File

@ -5,9 +5,9 @@ from telegram.ext import (
ContextTypes, ConversationHandler, CommandHandler, MessageHandler, filters,
)
from db.Position import Position
from db.User import User
from db.user_repository import UserRepository, user_repository
from model.Position import Position
from model.User import User
from model.user_repository import UserRepository, user_repository
from jobspy.scrapers.utils import create_logger
from telegram_bot import TelegramBot
from telegram_handler.start_handler_constats import START_MESSAGE, POSITION_MESSAGE, POSITION_NOT_FOUND, \
@ -38,26 +38,27 @@ class TelegramStartHandler(TelegramHandler):
"""Starts the conversation and asks the user about their position."""
chat: Chat = update.message.chat
user = User(full_name=chat.full_name, username=chat.username, chat_id=chat.id)
user_repository.insert_user(user)
# user_repository.insert_user(user)
await update.message.reply_text(START_MESSAGE)
buttons = [[KeyboardButton(position.value)] for position in Position]
reply_markup = ReplyKeyboardMarkup(buttons, one_time_keyboard=True,
input_field_placeholder=Flow.POSITION.name)
await update.message.reply_text(
START_MESSAGE + POSITION_MESSAGE,
POSITION_MESSAGE,
reply_markup=reply_markup,
)
return Flow.POSITION.value
async def position(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
"""Stores the selected position and asks for a photo."""
"""Stores the selected position and asks for a locations."""
user = update.message.from_user
self.logger.info("Position of %s: %s", user.first_name, update.message.text)
position = next((p for p in self.positions if p.name == update.message.text), None)
position = next((p for p in Position if p.name == update.message.text), None)
if not position:
await update.message.reply_text(POSITION_NOT_FOUND)
buttons = [[KeyboardButton(position.name)] for position in self.positions]
buttons = [[KeyboardButton(position.name)] for position in Position]
reply_markup = ReplyKeyboardMarkup(buttons, one_time_keyboard=True,
input_field_placeholder=Flow.POSITION.name)
await update.message.reply_text(
@ -71,7 +72,7 @@ class TelegramStartHandler(TelegramHandler):
return Flow.ADDRESS.value
async def address(self, update: Update) -> int:
"""Stores the photo and asks for a location."""
"""Asks for a location."""
user = update.message.from_user
self.cities = update.message.text.split(",")
reply_markup = ReplyKeyboardMarkup([[KeyboardButton("Yes"), KeyboardButton("No")]], one_time_keyboard=True,
@ -81,6 +82,7 @@ class TelegramStartHandler(TelegramHandler):
return Flow.VERIFY_ADDRESS.value
async def verify_address(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
"""Verify for a Address."""
if update.message.text == "No":
await update.message.reply_text(LOCATION_MESSAGE)
return Flow.ADDRESS.value
@ -94,7 +96,7 @@ class TelegramStartHandler(TelegramHandler):
return Flow.EXPERIENCE.value
async def experience(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
"""Stores the info about the user and ends the conversation."""
"""Asks for a experience."""
user = update.message.from_user
self.logger.info("Experience of %s: %s", user.first_name, update.message.text)
@ -103,7 +105,7 @@ class TelegramStartHandler(TelegramHandler):
return Flow.FILTERS.value
async def filters_flow(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
"""Stores the location and asks for some info about the user."""
"""Asks for a filters_flow."""
self.filters = update.message.text.split(",")
reply_markup = ReplyKeyboardMarkup([[KeyboardButton("Yes"), KeyboardButton("No")]], one_time_keyboard=True,
input_field_placeholder=Flow.VERIFY_FILTERS.name)
@ -112,6 +114,7 @@ class TelegramStartHandler(TelegramHandler):
return Flow.VERIFY_FILTERS.value
async def verify_filter(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
"""Verify for a filters_flow."""
if update.message.text == "No":
await update.message.reply_text(FILTER_TILE_MESSAGE)
return Flow.FILTERS.value

View File

@ -1,6 +1,6 @@
from dotenv import load_dotenv
from db.job_repository import JobRepository
from model.job_repository import JobRepository
from tests.test_util import createMockJob
load_dotenv()