Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
ticket-booking
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
arjun.b
ticket-booking
Commits
4085f920
Commit
4085f920
authored
Feb 14, 2023
by
arjun.b
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated
parent
a9a81c1e
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
28 additions
and
38 deletions
+28
-38
scripts/core/handlers/book_ticket.py
+13
-31
scripts/database/db_connect.py
+2
-2
scripts/database/model.py
+3
-3
scripts/external/logging_log_ERROR.log
+8
-0
scripts/services/publish.py
+2
-2
No files found.
scripts/core/handlers/book_ticket.py
View file @
4085f920
...
...
@@ -9,34 +9,6 @@ class Book_Ticket:
@staticmethod
def
book_ticket
(
ticket
):
try
:
# gold_row = 10
# gold_seat_per_row = 30
# silver_row = 5
# silver_seat_per_row = 25
booking
=
[]
r
=
redis
.
Redis
(
host
=
'localhost'
,
port
=
6379
,
db
=
3
)
# Check the availability of seats in the preferred class
if
ticket
.
pref_class
==
'Gold'
:
total_rows
=
10
total_seats_per_row
=
30
key
=
'gold_class_seats'
elif
ticket
.
pref_class
==
'Silver'
:
total_rows
=
5
total_seats_per_row
=
25
key
=
'silver_class_seats'
# Get the current seat availability
seat_availability
=
r
.
get
(
key
)
if
seat_availability
:
seat_availability
=
int
(
seat_availability
)
else
:
seat_availability
=
total_rows
*
total_seats_per_row
r
.
set
(
key
,
seat_availability
)
# Check if there are enough seats available
if
seat_availability
>=
ticket
.
no_of_ticket
:
seat_numbers
=
[]
for
i
in
range
(
ticket
.
no_of_ticket
):
seat_numbers
.
append
(
f
'{ticket.pref_class}-{seat_availability - i}'
)
r
.
decr
(
key
,
ticket
.
no_of_ticket
)
# save ticket details to database
save_ticket
=
Ticket
(
...
...
@@ -64,7 +36,6 @@ class BookingDetails:
session
=
db_connect
()
records
=
session
.
query
(
Ticket
)
.
all
()
dict_records
=
[
record
.
__dict__
for
record
in
records
]
dict_records
=
dict_records
[
1
:]
# Remove any keys from the dictionaries that start with an underscore
dict_records_clean
=
[
{
...
...
@@ -74,8 +45,19 @@ class BookingDetails:
]
# Use pandas to convert the list of dictionaries to a DataFrame
df
=
pd
.
DataFrame
(
dict_records_clean
)
df
=
df
.
drop
(
df
.
columns
[
0
],
axis
=
1
)
# Use pandas to save the DataFrame to an Excel file
df
.
to_excel
(
'scripts/external/
output_file
.xlsx'
,
index
=
False
)
df
.
to_excel
(
'scripts/external/
booking_details
.xlsx'
,
index
=
False
)
except
Exception
as
e
:
logger
.
error
(
e
)
@staticmethod
def
clean_record
(
records
):
dict_records
=
[
record
.
__dict__
for
record
in
records
]
# Remove any keys from the dictionaries that start with an underscore
dict_records_clean
=
[
{
key
:
values
for
key
,
values
in
record
.
items
()
if
not
key
.
startswith
(
'_'
)
}
for
record
in
dict_records
]
return
dict_records_clean
scripts/database/db_connect.py
View file @
4085f920
...
...
@@ -7,9 +7,9 @@ from scripts.logging.logging import logger
def
db_connect
():
try
:
engine
=
create_engine
(
"postgresql://postgres:123@localhost/ticket"
)
Session
=
sessionmaker
(
autocommit
=
False
,
autoflush
=
False
,
bind
=
engine
)
sessions
=
sessionmaker
(
autocommit
=
False
,
autoflush
=
False
,
bind
=
engine
)
Base
.
metadata
.
create_all
(
engine
)
session
=
Session
()
session
=
sessions
()
return
session
except
Exception
as
e
:
logger
.
error
(
e
)
...
...
scripts/database/model.py
View file @
4085f920
from
datetime
import
date
from
sqlalchemy
import
Column
,
String
,
Integer
,
Boolean
,
Date
from
datetime
import
date
time
from
sqlalchemy
import
Column
,
String
,
Integer
,
Boolean
,
Date
Time
from
sqlalchemy.orm
import
declarative_base
Base
=
declarative_base
()
...
...
@@ -12,6 +12,6 @@ class Ticket(Base):
preferred_class
=
Column
(
String
)
no_of_tickets
=
Column
(
Integer
)
seat_no
=
Column
(
String
)
date_of_purchase
=
Column
(
Date
,
default
=
date
.
today
())
date_of_purchase
=
Column
(
Date
Time
,
default
=
datetime
.
now
())
age
=
Column
(
Integer
)
deleted
=
Column
(
Boolean
,
default
=
False
)
scripts/external/logging_log_ERROR.log
View file @
4085f920
...
...
@@ -144,3 +144,11 @@ DETAIL: Key (mobile_no)=(9988776655) already exists.
2023-02-14 14:13:54 - ERROR - [AnyIO worker thread:delete_row():29] - type object 'Ticket' has no attribute 'status'
2023-02-14 14:14:54 - ERROR - [AnyIO worker thread:delete_row():29] - type object 'Ticket' has no attribute 'status'
2023-02-14 14:16:47 - ERROR - [AnyIO worker thread:delete_row():29] - type object 'Ticket' has no attribute 'status'
2023-02-14 15:09:33 - ERROR - [AnyIO worker thread:get_details():81] - index 0 is out of bounds for axis 0 with size 0
2023-02-14 15:56:34 - ERROR - [AnyIO worker thread:book_ticket():51] - local variable 'key' referenced before assignment
2023-02-14 16:08:50 - ERROR - [AnyIO worker thread:book_ticket():51] - (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "ticket_details_mobile_no_key"
DETAIL: Key (mobile_no)=(8989898989) already exists.
[SQL: INSERT INTO ticket_details (mobile_no, preferred_class, no_of_tickets, seat_no, date_of_purchase, age, deleted) VALUES (%(mobile_no)s, %(preferred_class)s, %(no_of_tickets)s, %(seat_no)s, %(date_of_purchase)s, %(age)s, %(deleted)s) RETURNING ticket_details.booking_id]
[parameters: {'mobile_no': 8989898989, 'preferred_class': 'Gold', 'no_of_tickets': 1, 'seat_no': '25', 'date_of_purchase': datetime.datetime(2023, 2, 14, 16, 8, 7, 834305), 'age': 21, 'deleted': False}]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
scripts/services/publish.py
View file @
4085f920
...
...
@@ -3,7 +3,7 @@ from fastapi import APIRouter
from
scripts.constants.end_points
import
EndPoints
from
scripts.core.handlers.book_ticket
import
Book_Ticket
,
BookingDetails
from
scripts.core.handlers.delete_ticket
import
db_handler
from
scripts.database.schema
import
Film_Ticket
,
soft_delete
from
scripts.database.schema
import
Film_Ticket
router
=
APIRouter
()
...
...
@@ -22,7 +22,7 @@ def book_ticket(ticket: Film_Ticket):
@router.post
(
EndPoints
.
delete_a_ticket
,
tags
=
[
"delete a ticket"
])
def
delete_tickets
(
tid
:
int
):
res
=
db_handler
.
delete_row
(
tid
)
return
res
return
{
f
'tickets {res} deleted'
}
@router.get
(
EndPoints
.
get_booking_details
,
tags
=
[
"get booking details"
])
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment