2일차: Android - Wi-Fi 정보 수집 및 등록
목표: 앱에서 사용자의 현재 Wi-Fi 정보를 가져오고, 집 Wi-Fi를 등록하는 기능을 구현합니다.
세부 할 일:
Wi-Fi 권한 요청 및 현재 연결된 Wi-Fi의 SSID, BSSID 가져오기 기능 구현
사용자가 "우리집 Wi-Fi로 등록" 버튼을 누르면 해당 Wi-Fi 정보를 앱 내부에 저장하는 화면 및 로직 구현
DB 연결
from fastapi import FastAPI
import models
from database import SessionLocal, engine
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from dotenv import load_dotenv
import os
load_dotenv()
DATABASE_URL = os.getenv("DATABASE_URL")
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
from sqlalchemy import Column, DateTime, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
user_name = Column(String(50), unique=True, index=True, nullable=False)
home_wifi_bssid = Column(String(50), nullable=True)
logs = relationship("WifiLog", back_populates="user")
class WifiLog(Base):
__tablename__ = "wifi_logs"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
bssid = Column(String(50), nullable=False)
ssid = Column(String(50), index=True, nullable=False)
start_time = Column(DateTime, server_default=func.now(), nullable=False)
end_time = Column(DateTime, nullable=True)
user = relationship("User", back_populates="logs")
다음과 같이 구성하였으며 user 테이블에서 user_name과 wifilog테이블에서 ssid 컬럼이 추가되었다

다음과 같이 DB를 구성하였다
이후 Backend API 부터 제작하기로 하였다
uses
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List
from database import get_db
import schemas
from api import user_api
user = APIRouter(prefix="/user", tags=["user"])
@user.post("/create", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
db_user = user_api.get_user_by_name(db, user.user_name)
if db_user:
raise HTTPException(status_code=400, detail="Username already registered")
return user_api.create_user(db=db, user=user)
@user.get("/name/{user_name}", response_model=schemas.User)
def read_user_by_name(user_name: str, db: Session = Depends(get_db)):
db_user = user_api.get_user_by_name(db, user_name=user_name)
if db_user is None:
raise HTTPException(status_code=404, detail="User not found")
return db_user
@user.get("/id/{user_id}", response_model=schemas.User)
def read_user_by_id(user_id: int, db: Session = Depends(get_db)):
db_user = user_api.get_user_by_id(db, user_id=user_id)
if db_user is None:
raise HTTPException(status_code=404, detail="User not found")
return db_user
@user.get("/list", response_model=List[schemas.User])
def read_users(start: int = 0, last: int = 10, db: Session = Depends(get_db)):
users = user_api.get_all_users(db, start=start, last=last)
return users
from sqlalchemy.orm import Session
import models, schemas
# 새로운 사용자를 생성
def create_user(db: Session, user: schemas.UserCreate):
db_user = models.User(**user.model_dump())
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
# 전체 사용자 목록
def get_all_users(db: Session, start: int = 0, last: int = 10):
return db.query(models.User).offset(start).limit(last).all()
# 사용자 id로 사용자 반환
def get_user_by_id(db: Session, user_id: int):
return db.query(models.User).filter(models.User.id == user_id).first()
# 사용자 id로 사용자 반환
def get_user_by_name(db: Session, user_name: str):
return db.query(models.User).filter(models.User.user_name == user_name).first()
from datetime import datetime
from pydantic import BaseModel
# User 관련 스키마
class UserBase(BaseModel):
user_name: str
class UserCreate(UserBase):
pass
class User(UserBase):
id: int
user_name: str
class Config:
from_attributes = True
다음과 같이 만들었으며
API 문서는 다음과 같다




'개발일지 > 안드로이드' 카테고리의 다른 글
| [안드로이드] Wifi기반 체류 시간 앱 - 5 (4) | 2025.08.18 |
|---|---|
| [안드로이드] Wifi기반 체류 시간 앱 - 4 (2) | 2025.08.16 |
| [안드로이드] Wifi기반 체류 시간 앱 - 3 (2) | 2025.08.15 |
| [안드로이드] Wifi기반 체류 시간 앱 - 1 (0) | 2025.08.11 |
| [안드로이드] Wifi기반 체류 시간 앱 - 준비 (1) | 2025.07.24 |