added contacts and addresses manager

This commit is contained in:
GotthardG
2024-11-04 21:31:01 +01:00
parent 689145150a
commit 4e76db4c9f
11 changed files with 467 additions and 10 deletions

View File

@ -11,7 +11,7 @@ class Shipment(Base):
shipment_name = Column(String, index=True)
shipment_date = Column(Date)
shipment_status = Column(String)
comments = Column(String, nullable=True)
comments = Column(String(200), nullable=True)
contact_person_id = Column(Integer, ForeignKey("contact_persons.id"))
return_address_id = Column(Integer, ForeignKey("addresses.id"))
proposal_id = Column(Integer, ForeignKey('proposals.id'), nullable=True)

View File

@ -1,7 +1,7 @@
from fastapi import APIRouter, HTTPException, status, Depends
from sqlalchemy.orm import Session
from typing import List
from app.schemas import Address as AddressSchema, AddressCreate
from app.schemas import Address as AddressSchema, AddressCreate, AddressUpdate
from app.models import Address as AddressModel
from app.dependencies import get_db
@ -29,4 +29,30 @@ async def create_return_address(address: AddressCreate, db: Session = Depends(ge
db.add(db_address)
db.commit()
db.refresh(db_address)
return db_address
return db_address
@router.put("/{address_id}", response_model=AddressSchema)
async def update_return_address(address_id: int, address: AddressUpdate, db: Session = Depends(get_db)):
db_address = db.query(AddressModel).filter(AddressModel.id == address_id).first()
if not db_address:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Address not found."
)
for key, value in address.dict(exclude_unset=True).items():
setattr(db_address, key, value)
db.commit()
db.refresh(db_address)
return db_address
@router.delete("/{address_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_return_address(address_id: int, db: Session = Depends(get_db)):
db_address = db.query(AddressModel).filter(AddressModel.id == address_id).first()
if not db_address:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Address not found."
)
db.delete(db_address)
db.commit()
return

View File

@ -1,12 +1,13 @@
from fastapi import APIRouter, HTTPException, status, Depends
from sqlalchemy.orm import Session
from typing import List
from app.schemas import ContactPerson, ContactPersonCreate
from app.schemas import ContactPerson, ContactPersonCreate, ContactPersonUpdate
from app.models import ContactPerson as ContactPersonModel
from app.dependencies import get_db
router = APIRouter()
# Existing routes
@router.get("/", response_model=List[ContactPerson])
async def get_contacts(db: Session = Depends(get_db)):
return db.query(ContactPersonModel).all()
@ -28,4 +29,31 @@ async def create_contact(contact: ContactPersonCreate, db: Session = Depends(get
db.add(db_contact)
db.commit()
db.refresh(db_contact)
return db_contact
return db_contact
# New routes
@router.put("/{contact_id}", response_model=ContactPerson)
async def update_contact(contact_id: int, contact: ContactPersonUpdate, db: Session = Depends(get_db)):
db_contact = db.query(ContactPersonModel).filter(ContactPersonModel.id == contact_id).first()
if not db_contact:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Contact not found."
)
for key, value in contact.dict(exclude_unset=True).items():
setattr(db_contact, key, value)
db.commit()
db.refresh(db_contact)
return db_contact
@router.delete("/{contact_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_contact(contact_id: int, db: Session = Depends(get_db)):
db_contact = db.query(ContactPersonModel).filter(ContactPersonModel.id == contact_id).first()
if not db_contact:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Contact not found."
)
db.delete(db_contact)
db.commit()
return

View File

@ -21,6 +21,11 @@ class ContactPerson(ContactPersonBase):
class Config:
from_attributes = True
class ContactPersonUpdate(BaseModel):
firstname: str | None = None
lastname: str | None = None
phone_number: str | None = None
email: EmailStr | None = None
# Address schemas
class AddressCreate(BaseModel):
@ -36,6 +41,11 @@ class Address(AddressCreate):
class Config:
from_attributes = True
class AddressUpdate(BaseModel):
street: str | None = None
city: str | None = None
zipcode: str | None = None
country: str | None = None
# Sample schemas
class Sample(BaseModel):