-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.py
More file actions
146 lines (126 loc) · 5.34 KB
/
database.py
File metadata and controls
146 lines (126 loc) · 5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import sqlite3
from datetime import datetime
DB_NAME = 'database.db'
def init_db():
"""Инициализация базы данных и создание таблиц"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
# Таблица пользователей (сотрудников)
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
chat_id INTEGER UNIQUE NOT NULL,
username TEXT NOT NULL,
full_name TEXT,
is_admin INTEGER DEFAULT 0,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
''')
# Таблица новостей
cursor.execute('''
CREATE TABLE IF NOT EXISTS news (
id INTEGER PRIMARY KEY AUTOINCREMENT,
text TEXT NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
print("✅ База данных инициализирована")
def seed_test_data():
"""Заполнение базы тестовыми данными для демонстрации"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
# Проверяем, есть ли уже данные
cursor.execute('SELECT COUNT(*) FROM users')
if cursor.fetchone()[0] > 0:
print("⚠️ Тестовые данные уже существуют")
conn.close()
return
# Добавляем тестовых пользователей
# ВАЖНО: Замените эти chat_id на реальные для тестирования!
# Чтобы получить свой chat_id, напишите боту @userinfobot в Telegram
test_users = [
(298752282, 'denisyuce', 'Denis Yuce', 1), # Администратор (HR)
(114863002, 'mark', 'Mark Ivanov', 0), # Марк - администратор (HR)
]
cursor.executemany('INSERT INTO users (chat_id, username, full_name, is_admin) VALUES (?, ?, ?, ?)', test_users)
# Добавляем тестовые новости
test_news = [
'Добро пожаловать в систему HR-уведомлений!',
'С понедельника меняется график работы: 9:00-18:00',
'Напоминаем о корпоративе в пятницу в 19:00',
'Новые правила оформления отпусков доступны в общей папке',
]
for news_text in test_news:
cursor.execute('INSERT INTO news (text) VALUES (?)', (news_text,))
conn.commit()
conn.close()
print("✅ Тестовые данные добавлены")
def get_all_users():
"""Получить всех пользователей"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute('SELECT chat_id, username FROM users')
users = cursor.fetchall()
conn.close()
return users
def get_all_users_full():
"""Получить всех пользователей с полной информацией"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute('SELECT username, full_name, is_admin, created_at FROM users ORDER BY is_admin DESC, full_name')
users = cursor.fetchall()
conn.close()
return users
def get_user_by_username(username):
"""Найти пользователя по username"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute('SELECT chat_id, username FROM users WHERE username = ?', (username,))
user = cursor.fetchone()
conn.close()
return user
def is_admin(chat_id):
"""Проверить, является ли пользователь администратором"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute('SELECT is_admin FROM users WHERE chat_id = ?', (chat_id,))
result = cursor.fetchone()
conn.close()
return result and result[0] == 1
def add_news(text):
"""Добавить новость"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute('INSERT INTO news (text) VALUES (?)', (text,))
conn.commit()
conn.close()
def get_latest_news(limit=5):
"""Получить последние новости"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute('SELECT text, created_at FROM news ORDER BY id DESC LIMIT ?', (limit,))
news = cursor.fetchall()
conn.close()
return news
def add_user(chat_id, username):
"""Добавить нового пользователя"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
try:
cursor.execute('INSERT INTO users (chat_id, username) VALUES (?, ?)', (chat_id, username))
conn.commit()
conn.close()
return True
except sqlite3.IntegrityError:
# Пользователь уже существует
conn.close()
return False
if __name__ == '__main__':
# Если запустить этот файл напрямую, инициализируется база с тестовыми данными
init_db()
seed_test_data()
print("\n📊 Статистика базы данных:")
print(f"Пользователей: {len(get_all_users())}")
print(f"Новостей: {len(get_latest_news(100))}")