20240806

2024. 8. 6. 18:08SNS 프로젝트 일지/PHP

728x90
반응형

인스타그램 , FaceBook과 같은 SNS를 제작을 목표로 페이지를 만들고 있다.

 

먼저 제일 중요한 Feed에 대한 모델링이다.

  1. 게시물 테이블 (Feeds)
    • id (Primary Key): 고유 게시물 ID
    • user_id (Foreign Key): 게시물을 작성한 사용자 ID
    • content: 게시물 내용 (텍스트)
    • media_url: 사진 또는 비디오 URL
    • created_at: 게시물 작성 시간
    • updated_at: 게시물 수정 시간
  2. 댓글 테이블 (Comments)
    • id (Primary Key): 고유 댓글 ID
    • feed_id (Foreign Key): 댓글이 달린 게시물 ID
    • user_id (Foreign Key): 댓글을 작성한 사용자 ID
    • content: 댓글 내용
    • created_at: 댓글 작성 시간
  3. 좋아요 테이블 (Likes)
    • id (Primary Key): 고유 좋아요 ID
    • feed_id  (Foreign Key): 좋아요가 눌린 게시물 ID
    • user_id (Foreign Key): 좋아요를 누른 사용자 ID
    • created_at: 좋아요 누른 시간
  4. 팔로우 관계 테이블 (Follows)
    • id (Primary Key): 고유 팔로우 ID
    • follower_id (Foreign Key): 팔로우하는 사용자 ID
    • followed_id (Foreign Key): 팔로우당하는 사용자 ID
    • created_at: 팔로우 시작 시간

확장 테이블

  1. 태그 테이블 (Tags)
    • id (Primary Key): 고유 태그 ID
    • name: 태그 이름
  2. 게시물-태그 관계 테이블 (PostTags)
    • id (Primary Key): 고유 ID
    • feed_id  (Foreign Key): 게시물 ID
    • tag_id (Foreign Key): 태그 ID
  3. 알림 테이블 (Notifications)
    • id (Primary Key): 고유 알림 ID
    • user_id (Foreign Key): 알림을 받을 사용자 ID
    • type: 알림 유형 (예: 'like', 'comment', 'follow')
    • reference_id: 관련된 게시물 또는 댓글 ID
    • created_at: 알림 생성 시간
    • read_at: 알림 확인 시간

그리고 

Innertia 

https://inertiajs.com/

 

Inertia.js - The Modern Monolith

JavaScript apps the monolith way Inertia is a new approach to building classic server-driven web apps. We call it the modern monolith. Inertia allows you to create fully client-side rendered, single-page apps, without the complexity that comes with modern

inertiajs.com

 

React

https://react.dev/

 

React

React is the library for web and native user interfaces. Build user interfaces out of individual pieces called components written in JavaScript. React is designed to let you seamlessly combine components written by independent people, teams, and organizati

react.dev

를  Laravel11 Breeze와 연동시켰다.

 

기본제공하는 aritsan cli 에는 react 에 대한 명령어가 없기 때문에

 

https://recordfordev.tistory.com/23

 

20240805

회사  유저 DB 정보를 로컬 PC 에 받았다. 회사 유저의 PASSWORD 는 MD5 으로 HASH 되어있었다. 이부분을  Laravel Breeze 에서 사용 하고 있는 Brycpt 로 변환 하기 위해  php artisan migrate:refresh --seed   cli

recordfordev.tistory.com

을 기반으로 

 

php artisan make:command MakeReactComponent 

php artisan make:command MakeReactPages

php artisan make:command MakeReactService

 

를 만들었고 기본적으로 필요한 팩토리 데이터인 뉴스 피드를 위해

 

RssService class를 만들었다

 

<?php
namespace App\Services\Feed;

use App\Models\Feed;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Http;
use Carbon\Carbon;

class RssService
{
    protected $url;

    public function __construct()
    {
        $this->url = 'https://news.google.com/rss?hl=ko&gl=KR&ceid=KR:ko';
    }

    public function getRssFeed($url)
    {
        $feeds = [];

        try {
            $response = Http::get($url);

            if ($response->successful()) {
                $rss = simplexml_load_string($response->body());
                if ($rss && isset($rss->channel->item)) {
                    foreach ($rss->channel->item as $item) {
                        $feeds[] = [
                            'user_id' => 53,
                            'type'=>'news',
                            'title' => (string) $item->title,
                            'slug' => (string) $item->guid,
                            'content' => $this->parseContent((string) $item->description),
                            'media_url' => (string) $item->link,
                            'created_at' => Carbon::parse($item->pubDate)->toDateTimeString(),
                            'updated_at' => Carbon::parse($item->pubDate)->toDateTimeString(),
                        ];
                    }
                }
            } else {
                Log::error("Failed to fetch RSS feed: " . $response->status());
            }
        } catch (\Exception $e) {
            Log::error("Error fetching or parsing RSS feed: " . $e->getMessage());
        }

        return $feeds;
    }

    public function saveFeeds()
    {
        $feeds = $this->getRssFeed($this->url);
        foreach ($feeds as $feed) {
            Feed::updateOrCreate(['media_url' => $feed['media_url']], $feed);
        }
    }

    private function parseContent($content)
    {
        // Content parsing logic here (e.g., strip tags or handle special HTML content)
        return $content;
    }
}

 

 

RSS 피드의 URL 은 구글 뉴스로 생성자에서 지정해 주었다.

 

RSS 피드는 내일 커맨드로 스케줄을 생성하여 갱신할 예정이다.

 

오늘자 결과물은 

 

 

 

이고  내일 은 RSS 피드 자동 갱신과 SNS 글쓰기이다.

 

SNS 글쓰기에는 어떤 웹에디터를 사용해야 할지 벌써 의문이다.

 

 

깃 레포는 

 

https://github.com/jsh9587/new_dp/tree/master/new-dp

 

new_dp/new-dp at master · jsh9587/new_dp

Contribute to jsh9587/new_dp development by creating an account on GitHub.

github.com

 

이니 의견이나 피드백 항상 부탁드립니다.( _ _ )

 

 

 

 

 

P.S : 사내 DB를 집에서 사용 할 수 없기에 User 와 UserState Factory 로  가데이터를 만드는 DataSeeder 로 교체 하였다.

728x90
반응형

'SNS 프로젝트 일지 > PHP' 카테고리의 다른 글

20240808  (0) 2024.08.08
20240807  (0) 2024.08.07
20240805  (0) 2024.08.05
20240803  (0) 2024.08.03
20240731  (0) 2024.07.31