study/100 days (100일 챌린지)

[웹개발 100일] Day 16 - 페이지 별 필요한 API endpoint 구현 (글 작성, 글 목록 검색 및 조회, 글 상세 조회)

jihe_ 2025. 3. 1. 23:19
반응형

 

 

 

오늘의 잡담 (충청도 다녀온 얘기)

더보기

 

오늘은 충청도에 트레킹을 다녀왔어욤

핫또그

 

폭포를 봤읍니다

월이산에 있는 옥계폭포였음

 

여긴 와인이 특산물이더라구요

와인 아이스크림 먹어봤는데 생각보다 넘 맛있었음

 

트레킹 코스인 월류봉 도착

 

9km 정도 걸음

 

버섯농가에서 키우는 애옹이 망고

엄청 프렌들리함 ㅋㅋㅋㅋ

 

물은 다 얼어 있다

 

반야사까지 갔다가 귀가 완료

 

 

 

 

 

아 진도 안 나가니까 막막하다? 빡이친다?

 

제가 요즘 하고 있는 건요

게시물 서랍장에서 게시물 꺼내올 때 누가 썼는지도 보여줘야 되니까 관련 유저 정보도 유저 서랍장에서 같이 꺼내와야 하거든요.

그 작업을 하고 있답니다.

페이지 별로 필요한 정보들을 한 번에 가져오도록.. 뭐 그렇고 그런.. 넵

 

그래서 오늘까지는요

 

- 이벤트 리스트 조회 (제목, 글쓴이 검색 가능)

- 이벤트 디테일 조회
- 이벤트 발행

 

이 가능해졌습니다.

 

 


🚀 요약

작업 시간: 3시간
✅ 페이지별 필요한 엔드포인트 구현 (진행중)

 

 


🚀 페이지별 필요한 API 엔드포인트 구현

 

이벤트 리스트 조회 (제목, 글쓴이 검색 가능)

public async Task<IEnumerable<EventDto>> GetEventListAsync(string searchType, string searchText)
{
    var eventList = await _context.Events
        .Include(e => e.User)
        .Include(e => e.Category)
        .ToListAsync();

    if (!string.IsNullOrEmpty(searchText) && eventList != null)
    {
        switch (searchType)
        {
            case "Title":
                eventList = eventList.Where(e => e.Title.Contains(searchText)).ToList();
                break;

            case "Writer":
                eventList = eventList.Where(e => e.User != null &&
                                                e.User.Username != null &&
                                                e.User.Username.Contains(searchText)).ToList();
                break;

            // case "Participant":
            //     eventList = eventList.Where(e => e.Participants.Contains(/* ? */))
            //         .ToList();
            //     break;

            default:
                break;
        }
    }

    if (eventList == null)
        return [];

    var eventListWithImages = eventList.Select(e => new EventDto
    {
        Title = e.Title,
        Content = e.Content,
        Date = e.Date,
        Participants = e.Participants,
        CreatedAt = e.CreatedAt,
        User = e.User != null ? new UserDto
        {
            Id = e.User.Id,
            Username = e.User.Username,
            ProfileImageUrl = e.User.ProfileImageUrl
        } : null,
        Category = e.Category != null ? new CategoryDto
        {
            Id = e.Category.Id,
            Name = e.Category.Name
        } : null,
        EventImageList = _context.EventImages.ToList()
    }).ToList();

    return eventListWithImages;
}

 

참여자 검색은 내가 user id 리스트를 그냥 컬럼 하나에 다 때려넣어놔서 일단 어떻게 분리할지 생각을 좀 해봐야 할 듯

 

 

 

이벤트 디테일 조회

public async Task<EventDto?> GetEventByIdAsync(int eventId)
{
    var eventItem = await _context.Events
        .Include(e => e.User)
        .Include(e => e.Category)
        .Where(e => e.Id == eventId)
        .FirstOrDefaultAsync();

    if (eventItem == null)
    {
        return null;
    }

    var eventItemWithImages = new EventDto
        {
            Title = eventItem.Title,
            Content = eventItem.Content,
            Date = eventItem.Date,
            Participants = eventItem.Participants,
            CreatedAt = eventItem.CreatedAt,
            User = eventItem.User != null ? new UserDto
            {
                Id = eventItem.User.Id,
                Username = eventItem.User.Username,
                ProfileImageUrl = eventItem.User.ProfileImageUrl
            } : null,
            Category = eventItem.Category != null ? new CategoryDto
            {
                Id = eventItem.Category.Id,
                Name = eventItem.Category.Name
            } : null,
            EventImageList = _context.EventImages
                .Where(ei => ei.EventId == eventItem.Id)
                .ToList()
        };

    return eventItemWithImages;
}

 

아.. 이미지 이렇게 가져오는 게 최선이었을까..

나의 최선이긴 했는데 객관적으로 최선인지 모르겠음 아 몰라몰라

 

 

 

이벤트 발행

public async Task<Event> CreateEventAsync(EventDto eventDto)
{
    var newEvent = new Event
    {
        UserId = eventDto.UserId,
        CategoryId = eventDto.CategoryId,
        Title = eventDto.Title ?? "",
        Content = eventDto.Content,
        Date = eventDto.Date,
        EventImageList = eventDto.EventImageList
    };

    _context.Events.Add(newEvent);
    await _context.SaveChangesAsync();
    return newEvent;
}

 

포스트맨으로 데이터 잘 들어가는 것까지 확인 완~

 

 

 

반응형