{"id":9232,"date":"2026-09-02T08:26:23","date_gmt":"2026-09-01T23:26:23","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=9232"},"modified":"2026-09-03T11:32:08","modified_gmt":"2026-09-03T02:32:08","slug":"nextjs-sns-server-20","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/09\/02\/nextjs-sns-server-20\/","title":{"rendered":"[nextjs]SNS Server-20(myapp30)"},"content":{"rendered":"\n<p>\ud83d\udc49\ud83c\udffb myapp30\uc5d0\uc11c\ub294 \ub0b4\uac00 \uc791\uc131\ud55c \uae00 \uc0ad\uc81c\uc2dc \ub0b4 \uae00\uc744 \ubc1b\uc740 \uc11c\ubc84\uc758 \uae00\ub3c4 \uc0ad\uc81c\ud558\ub294 \uae30\ub2a5\uc744 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.<br>In myapp30, I added a feature that deletes the post on the server that received it whenever I delete my own post.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \uc804\uccb4 \ucf54\ub4dc\ub294 \uae43\ud5c8\ube0c\uc5d0\uc11c \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>You can find the full code on GitHub.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/gideonslife01\/flm-nextjs\">https:\/\/github.com\/gideonslife01\/flm-nextjs<\/a><\/p>\n\n\n\n<p>\ud83d\udcc1 \uc804\uccb4 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 \/ Overall Project Structure<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>myapp project\/  \n\u251c\u2500\u2500 app\/  (Next.js App Router)\n\u2502   \u251c\u2500\u2500 .well-known\/webfinger\/route.ts  -&gt; webfinger\n\u2502   \u251c\u2500\u2500 api\/follow\/route.ts    -&gt; Follow API(temporary)\n\u2502   \u251c\u2500\u2500 api\/announce\/route.ts  -&gt; Boost(Announcement)\n\u2502   \u251c\u2500\u2500 api\/like\/route.ts.     -&gt; Like API\n\u2502   \u251c\u2500\u2500 api\/posts\/route.ts     -&gt; Writing API\n\u2502   \u251c\u2500\u2500 api\/timeline\/route.ts  -&gt; Timeline API\n\u2502   \u251c\u2500\u2500 users\/&#91;username]\/\n\u2502   \u2502   \u251c\u2500\u2500 statuses\/&#91;id]\/route.ts -&gt; Indivisual Post\n\u2502   \u2502   \u251c\u2500\u2500 route.ts               -&gt; Acotr Information\n\u2502   \u2502   \u251c\u2500\u2500 followers\/route.ts     -&gt; Followers List\n\u2502   \u2502   \u251c\u2500\u2500 following\/route.ts     -&gt; Following List\n\u2502   \u2502   \u251c\u2500\u2500 inbox\/route.ts         -&gt; Inbox\n\u2502   \u2502   \u2514\u2500\u2500 outbox\/route.ts        -&gt; outbox\n\u2502   \u251c\u2500\u2500 usersui\/&#91;username]\/\n\u2502   \u2502   \u251c\u2500\u2500 page.tsx               -&gt; Timeline UI\n\u2502   \u2502   \u2514\u2500\u2500 _components\/themes\/\n\u2502   \u2502       \u251c\u2500\u2500 themeex\/ThemeexTheme.tsx   -&gt; Example Theme\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/PinaforeTheme.tsx -&gt; Theme 1\n\u2502   \u2502       \u251c\u2500\u2500 mastodon\/MastodonTheme.tsx -&gt; Theme 2\n\u2502   \u2502       \u2514\u2500\u2500 minimal\/MinimaltTheme.tsx  -&gt; Theme 3\n\u2502   \u251c\u2500\u2500 layout.tsx, page.tsx, globals.css\n\u2502   \u2514\u2500\u2500 favicon.ico\n\u251c\u2500\u2500 lib\/\n\u2502   \u251c\u2500\u2500 theme.tsx              -&gt; Theme Provider\n\u2502   \u251c\u2500\u2500<strong> <\/strong>watchThemes.ts         -&gt; Check real-time theme changes\n\u2502   \u251c\u2500\u2500 ap.ts                  -&gt; Follow Accept\n\u2502   \u2514\u2500\u2500 db.ts                  -&gt; DB connection\n\u251c\u2500\u2500 data\/\n\u2502   \u2514\u2500\u2500 keys\/                  -&gt; private.pem, public.pem\n\u251c\u2500\u2500 data.sqlite                -&gt; Database\n\u251c\u2500\u2500 Caddyfile                  -&gt; https \n\u251c\u2500\u2500 instrumentation.ts         -&gt; Background Server\n\u2514\u2500\u2500 package.json<\/code><\/pre>\n\n\n\n<p>\ud83d\udcc1 \ud504\ub85c\uc81d\uc2a4 \uc2dc\uc791 \/ Project Start<\/p>\n\n\n\n<p>&#8212; \ud504\ub85c\uc81d\ud2b8 \uc124\uce58,\ubaa8\ub4c8\uc124\uce58,\ub3c4\uba54\uc778 \uc124\uc815,\ud568\uc218,\ub77c\uc6b0\ud2b8,\ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 \uc124\uba85\uc740 \uc544\ub798\uc758 \ud3ec\uc2a4\ud2b8\ub97c \ucc38\uc870\ud558\uc138\uc694<br>Please refer to the post below for information on project and module installation, domain configuration, functions, routes, and the project structure.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-freelifemakers-org wp-block-embed-freelifemakers-org\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"q26BSoiYXO\"><a href=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/09\/03\/nextjs-project-summary\/\">[nextjs]\ud504\ub85c\uc81d\ud2b8\uc694\uc57d\/project summary(myapp30+)<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;[nextjs]\ud504\ub85c\uc81d\ud2b8\uc694\uc57d\/project summary(myapp30+)&#8221; &#8212; freelifemakers.org\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/09\/03\/nextjs-project-summary\/embed\/#?secret=87GyeTeReI#?secret=q26BSoiYXO\" data-secret=\"q26BSoiYXO\" width=\"560\" height=\"315\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\ud83d\udcc1 \ucf54\ub4dc\uc218\uc815 \/ Code Modification<\/p>\n\n\n\n<p>&nbsp;\u2714\ufe0fapp\/api\/posts\/route.ts<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- posts\ub9cc \uc0ad\uc81c\ud558\uace0 \uc5f0\ubc29\uc5d0\u00a0Delete\u00a0\uc548 \ubcf4\ub0b4\ub294 \ubb38\uc81c \uc218\uc815\nFixed an issue where only 'posts' were deleted without sending a 'Delete' request to the federation.\n\n1) inbox_posts\ub294 \uc548 \uc9c0\uc6c0 +\u00a0likes,\u00a0announces\u00a0\uce74\uc6b4\ud2b8\ub3c4 \uc548 \uc9c0\uc6c0\n`inbox_posts` are not deleted, and `likes` and `announces` counts are not cleared either.\n\n2) import { sendDelete }\u00a0\ub9e8 \uc704\uc5d0 \ucd94\uac00 - \uc11c\uba85 \ud3ec\ud568\ub41c \ud568\uc218 \uc0ac\uc6a9\nAdd `import { sendDelete }` at the top \u2013 use the function that includes the signature.\n\n3) DELETE\uc5d0\uc11c\u00a0fetch\u00a0\uc9c1\uc811 \ud638\ucd9c ->\u00a0sendDelete(f.inbox, id, username)\ub85c \uad50\uccb4\nReplaced direct `fetch` call in `DELETE` with `sendDelete(f.inbox, id, username)`.\n\n4) POST\ub3c4\u00a0for...of await\u00a0->\u00a0Promise.allSettled\u00a0\ubcd1\ub82c\ub85c \ubcc0\uacbd\u00a0(\uc18d\ub3c4 \ud5a5\uc0c1)\nChanged POST requests from `for...of await` to `Promise.allSettled` for parallel execution (improved speed).<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0fapp\/lib\/ap.ts<\/p>\n\n\n\n<p>&#8212; \uc804\uccb4 \ucf54\ub4dc \ub9ac\ud329\ud1a0\ub9c1 , sendDelete\ud568\uc218 \ucd94\uac00<br>Refactored the entire codebase and added the <code>sendDelete<\/code> function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export async function sendDelete(toInbox: string, postId: string, username: string) {\n  const actorId = `https:\/\/${DOMAIN}\/users\/${username}`;\n\n  \/\/ postId\uac00 \uc774\ubbf8 \uc804\uccb4 URL\uc774\uba74 \uadf8\ub300\ub85c, UUID\uba74 \ub9cc\ub4e4\uc5b4\uc8fc\uae30 \n  \/\/ If postId is already a full URL, use it; if it's a UUID, construct it! \n  const objectId = postId.startsWith('http') \n    ? postId \n    : `${actorId}\/statuses\/${postId}`; \n\n  const doc = {\n    '@context': 'https:\/\/www.w3.org\/ns\/activitystreams',\n    id: `${actorId}#delete\/${crypto.randomUUID()}`,\n    type: 'Delete',\n    actor: actorId,\n    object: objectId,\n    published: new Date().toISOString(),\n    to: &#91;'https:\/\/www.w3.org\/ns\/activitystreams#Public']\n  };\n  console.log(`\ud83d\uddd1 &#91;${username}] Delete -> ${toInbox} (${postId})`);\n  const { res, text } = await signAndSend(toInbox, doc, username);\n  console.log(`\ud83d\udcec Delete: ${res.status}`, text);\n  return { ok: res.ok, status: res.status, text, deleteDoc: doc };\n}<\/code><\/pre>\n\n\n\n<p>\ud83d\udcc1 \ud14c\uc2a4\ud2b8 \/ Test<\/p>\n\n\n\n<p>\u2714\ufe0f \ub9c8\uc2a4\ud1a0\ub3c8\uc5d0\uc11c \uae00\uc4f0\uace0 \ub0b4\uc11c\ubc84\ub85c \uae00 \ubc30\ub2ec\ub418\ub294\uc9c0 \ud655\uc778\ud558\uae30<br>Writing a post on Mastodon and checking if it gets delivered to my server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"667\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp30-mastodon-write-jpg.jpg\" alt=\"\" class=\"wp-image-9418\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp30-mastodon-write-jpg.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp30-mastodon-write-jpg-300x250.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp30-mastodon-write-jpg-768x640.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp30-mastodon-write-jpg-400x334.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">mastodon<\/figcaption><\/figure>\n\n\n\n<p>&#8212;  inbox_posts\uc5d0 \uae00\ubc30\ub2ec \ud655\uc778<br>Check for post deliveries in inbox_posts<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sqlite&gt; select id,content from inbox_posts;\nhttps:\/\/freelifemakers.com\/users\/user1\/statuses\/01M0EJPP57WC47FAK0N395S7MB|&lt;p&gt;inbox_posts table test&lt;\/p&gt;\nhttps:\/\/freelifemakers.com\/users\/user1\/statuses\/01M0KMS8K1XRFW703S32MX6V25|&lt;p&gt;actor test&lt;\/p&gt;\n01M0XT1VBF23F8Y5EXAPK1VY56|&lt;p&gt;likes test&lt;\/p&gt;\n01M12X859S7WNSJJD42NWZS8T7|&lt;p&gt;boost delivery test!!&lt;\/p&gt;\n01M1AWST9S00BRBDC0AAEEN6VA|&lt;p&gt;Boots Button Test&lt;\/p&gt;\n01M1DCBVDYTGB7W4CK3RVHN121|&lt;p&gt;Favorite TEst&lt;\/p&gt;\n117193471582999448|&lt;p&gt;Hello Mastodon!!!&lt;\/p&gt;\n117194002682623887|&lt;p&gt;mastodon boost test&lt;\/p&gt;\n117194002682623887_boost_1788238635654|&lt;p&gt;mastodon boost test&lt;\/p&gt;\n117194002682623887_boost_1788239235922|&lt;p&gt;mastodon boost test&lt;\/p&gt;\n9b2ead85-4b15-4df9-9de4-04c4a7fbcab4_boost_1788239544485|Hello! Mastodon!!\n117204066261760455|&lt;p&gt;mastodon ,ally,user1 posts delete test&lt;\/p&gt;\nsqlite&gt; <\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \uae00 \uc0ad\uc81c \/ Delete Post<\/p>\n\n\n\n<p>&#8212; \ub0b4\uac00 \uc4f4\uae00\uacfc \uc11c\ubc84\ub85c \ubc30\ub2ec\ub41c \uae00\ub3c4 \uc0ad\uc81c(POST,GET \ubaa8\ub450 \uc9c0\uc6d0)<br>Deletes both the posts I wrote and the posts delivered to the server (supports both POST and GET).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \uae30\uc874 POST \ubc29\uc2dd\uacfc GET\ubc29\uc2dd\uc744 \ubaa8\ub450 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \n# Supports both existing POST and GET methods.\n# POST\ncurl -X DELETE https:\/\/aloy-horizon.duckdns.org\/api\/posts \\\n -H \"Content-Type: application\/json\" \\\n -d '{\"username\":\"user1\",\"id\":\"117204066261760455\"}'\n\n# GET\ncurl -X DELETE \"https:\/\/aloy-horizon.duckdns.org\/api\/posts?id=117204066261760455&amp;username=user1\"\n<\/code><\/pre>\n\n\n\n<p>&#8212; \ub0b4 \ubc1b\uc740 \uae00 \uc0ad\uc81c\ud574\ubcf4\uae30( \ub0b4\uac00 \uc791\uc131\ud55c \uae00  \uc544\ub2c8\uba74 \uc0ad\uc81c \uae08\uc9c0,\uc815\uc0c1\uc801\uc73c\ub85c \uc5d0\ub7ec \ubc1c\uc0dd \uc5ec\ubd80 \ud655\uc778\ud558\uae30 )<br>Try deleting a received post (ensure posts not written by me cannot be deleted and verify that errors occur as expected).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># SQLITE\nsqlite&gt; select id,content from inbox_posts;\nhttps:\/\/freelifemakers.com\/users\/user1\/statuses\/01M0EJPP57WC47FAK0N395S7MB|&lt;p&gt;inbox_posts table test&lt;\/p&gt;\nhttps:\/\/freelifemakers.com\/users\/user1\/statuses\/01M0KMS8K1XRFW703S32MX6V25|&lt;p&gt;actor test&lt;\/p&gt;\n01M0XT1VBF23F8Y5EXAPK1VY56|&lt;p&gt;likes test&lt;\/p&gt;\n01M12X859S7WNSJJD42NWZS8T7|&lt;p&gt;boost delivery test!!&lt;\/p&gt;\n01M1AWST9S00BRBDC0AAEEN6VA|&lt;p&gt;Boots Button Test&lt;\/p&gt;\n01M1DCBVDYTGB7W4CK3RVHN121|&lt;p&gt;Favorite TEst&lt;\/p&gt;\n117193471582999448|&lt;p&gt;Hello Mastodon!!!&lt;\/p&gt;\n117194002682623887|&lt;p&gt;mastodon boost test&lt;\/p&gt;\n117194002682623887_boost_1788238635654|&lt;p&gt;mastodon boost test&lt;\/p&gt;\n117194002682623887_boost_1788239235922|&lt;p&gt;mastodon boost test&lt;\/p&gt;\n9b2ead85-4b15-4df9-9de4-04c4a7fbcab4_boost_1788239544485|Hello! Mastodon!!\n<strong>117204066261760455|&lt;p&gt;mastodon ,ally,user1 posts delete test&lt;\/p&gt;<\/strong>\nsqlite&gt; \n\n# Terminal\nmyapp30 % curl -X DELETE \"https:\/\/aloy-horizon.duckdns.org\/api\/posts?id=<strong>117204066261760455&amp;username<\/strong>=user1\"\n<strong>{\"error\":\"\ub0b4 \uae00 \uc544\ub2d8 \/ Not your post\"}%   <\/strong>                                                                                                                \nmyapp30 % curl -X DELETE https:\/\/aloy-horizon.duckdns.org\/api\/posts \\\n -H \"Content-Type: application\/json\" \\\n -d '{\"username\":\"user1\",\"id\":\"<strong>117204066261760455<\/strong>\"}'\n<strong>{\"error\":\"\ub0b4 \uae00 \uc544\ub2d8 \/ Not your post\"}%  <\/strong> <\/code><\/pre>\n\n\n\n<p>&#8212; \ub0b4\uac00 \uc791\uc131\ud55c \uae00 \uc0ad\uc81c\ud558\uae30 \/ Delete my post<\/p>\n\n\n\n<p>1)\ud130\ubbf8\ub110\uc5d0\uc11c \uae00\uc4f0\uae30 \/ Writing in the Terminal<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \ud130\ubbf8\ub110\uc5d0\uc11c \uae00\uc4f0\uae30\n# Writing in the Terminal\n\nmyapp30 % <strong>curl -X POST https:\/\/aloy-horizon.duckdns.org\/api\/posts \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"username\":\"user1\",\"content\":\"&lt;p>\uc5f0\ubc29 \uc0ad\uc81c \ud14c\uc2a4\ud2b8 \/ Federated Deletion Test!!!&lt;\/p>\"}'<\/strong>\n{\"id\":\"fe9d75bb-8fb4-4ec3-9cff-76e5de8a4261\",\"content\":\"&lt;p>\uc5f0\ubc29 \uc0ad\uc81c \ud14c\uc2a4\ud2b8 \/ Federated Deletion Test!!!&lt;\/p>\",\"created_at\":\"2026-09-03 00:33:22\",\"username\":\"user1\"}%  <\/code><\/pre>\n\n\n\n<p>2) \ub9c8\uc2a4\ud1a0\ub3c8 \ubc0f \uace0\ud22c\uc18c\uc15c \uc11c\ubc84\uc5d0 \uae00 \ubc30\ub2ec\ud655\uc778<br>Verify post delivery to Mastodon and GoToSocial servers.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"651\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg.jpg\" alt=\"\" class=\"wp-image-9421\" style=\"width:824px;height:auto\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg-300x244.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg-768x625.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg-400x326.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">mastodon(mastodon.social\/@freelifemakers)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"651\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg-1.jpg\" alt=\"\" class=\"wp-image-9422\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg-1.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg-1-300x244.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg-1-768x625.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapo30-gotosocial-jpg-1-400x326.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">gotosocial(freelifemakers.com\/@user1)<\/figcaption><\/figure>\n\n\n\n<p>3) \ub0b4 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \ub2e4\ub978 \uc11c\ubc84\ub85c \ubc30\ub2ec\ub41c \uae00\ub3c4 \uc0ad\uc81c \ud655\uc778 <br>Check for deletion of posts delivered to servers other than my database as well.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>                                                                                                                                             \n# SQLITE\uc5d0 \uae00 \uc800\uc7a5 \ud655\uc778\n# Verify post storage in SQLite\n\nmyapp30 % sqlite3 data.sqlite\nSQLite version 3.51.0 2025-06-12 13:14:41\nEnter \".help\" for usage hints.\nsqlite> select id,content from posts;\ne6c99652-572f-491a-9e61-05e67b0d58fc|Hello! my SNS!!\ndcece9ee-8d4a-4f63-91e1-22fc60513f62|Hello! my SNS!!\ncc30330e-7040-4a1b-9e60-731066b8817e|Hello! my SNS3!!\ne6d532c8-974b-4a01-89f6-6e1b2c4cff32|Hello Fediverse! #test\naea0ec89-a368-44a9-8493-b2bd82a797a8|post test! #test\n9b2ead85-4b15-4df9-9de4-04c4a7fbcab4|Hello! Mastodon!!\n<strong>fe9d75bb-8fb4-4ec3-9cff-76e5de8a4261|&lt;p>\uc5f0\ubc29 \uc0ad\uc81c \ud14c\uc2a4\ud2b8 \/ Federated Deletion Test!!!&lt;\/p><\/strong>\nsqlite> \n\n# \ub0b4\uac00 \uc791\uc131\ud55c \uae00 \uc0ad\uc81c (GET)\n# Delete My Post (GET)\n\ncurl -X DELETE \"https:\/\/aloy-horizon.duckdns.org\/api\/posts?id=<strong>fe9d75bb-8fb4-4ec3-9cff-76e5de8a4261<\/strong>&amp;username=user1\"\n\n# Terminal\n\nmyapp30 % curl -X DELETE \"https:\/\/aloy-horizon.duckdns.org\/api\/posts?id=fe9d75bb-8fb4-4ec3-9cff-76e5de8a4261&amp;username=user1\"\n{\"ok\":true,\"deletedId\":\"fe9d75bb-8fb4-4ec3-9cff-76e5de8a4261\"}%                                                                                           \ngimdaegyeong@gimdaegyeong-ui-MacBookAir myapp30 % \n\n# SQLITE\nmyapp30 % sqlite3 data.sqlite\nSQLite version 3.51.0 2025-06-12 13:14:41\nEnter \".help\" for usage hints.\nsqlite> select id,content from posts;\ne6c99652-572f-491a-9e61-05e67b0d58fc|Hello! my SNS!!\ndcece9ee-8d4a-4f63-91e1-22fc60513f62|Hello! my SNS!!\ncc30330e-7040-4a1b-9e60-731066b8817e|Hello! my SNS3!!\ne6d532c8-974b-4a01-89f6-6e1b2c4cff32|Hello Fediverse! #test\naea0ec89-a368-44a9-8493-b2bd82a797a8|post test! #test\n9b2ead85-4b15-4df9-9de4-04c4a7fbcab4|Hello! Mastodon!!\nsqlite> \n\n# \ub0b4\uac00 \uc791\uc131\ud55c \uae00 \uc0ad\uc81c(POST)\n# Delete Post I Wrote (POST)\n\nmyapp30 % curl -X DELETE https:\/\/aloy-horizon.duckdns.org\/api\/posts \\\n -H \"Content-Type: application\/json\" \\\n -d '{\"username\":\"user1\",\"id\":\"73f8e331-fdcd-48a4-bb03-c3c010bceba5\"}'\n<strong>{\"ok\":true,\"deletedId\":\"73f8e331-fdcd-48a4-bb03-c3c010bceba5\"}% <\/strong>  \n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\uc694\ud55c\ubcf5\uc74c 8\uc7a5 32\uc808 \/ John 8:32<\/p>\n\n\n\n<p>&#8220;\uadf8\ub9ac\uace0 \ub108\ud76c\ub294 \uc9c4\ub9ac\ub97c \uc54c\uac8c \ub420 \uac83\uc774\uba70, \uc9c4\ub9ac\uac00 \ub108\ud76c\ub97c \uc790\uc720\ub86d\uac8c \ud560 \uac83\uc774\ub2e4.&#8221;<\/p>\n\n\n\n<p>&#8220;Then you will know the truth ,and the truth will set you free&#8221;<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49\ud83c\udffb myapp30\uc5d0\uc11c\ub294 \ub0b4\uac00 \uc791\uc131\ud55c \uae00 \uc0ad\uc81c\uc2dc \ub0b4 \uae00\uc744 \ubc1b\uc740 \uc11c\ubc84\uc758 \uae00\ub3c4 \uc0ad\uc81c\ud558\ub294 \uae30\ub2a5\uc744 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.In myapp30, I added a feature that deletes the post on the server that received it whenever I delete my own post. \ud83d\udc49\ud83c\udffb \uc804\uccb4 \ucf54\ub4dc\ub294 \uae43\ud5c8\ube0c\uc5d0\uc11c \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.You can find the full code on GitHub. https:\/\/github.com\/gideonslife01\/flm-nextjs \ud83d\udcc1 \uc804\uccb4 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,27,1,7],"tags":[],"class_list":["post-9232","post","type-post","status-publish","format-standard","hentry","category-news","category-nextjs","category-uncategorized","category-website","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/9232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=9232"}],"version-history":[{"count":64,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/9232\/revisions"}],"predecessor-version":[{"id":9429,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/9232\/revisions\/9429"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=9232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=9232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=9232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}