uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 419
Obunachilar
+124 soatlar
-17 kunlar
-530 kunlar
Postlar arxiv
ToCode
1 419
ืชืจื’ื™ืœ SQL - ืžื—ื™ืงืช ืฉื•ืจื•ืช ื›ืคื•ืœื•ืช ื ืชื•ื ื” ื˜ื‘ืœื” ืขื ืคืจื™ื˜ื™ื ืฉื ื•ืฆืจื” ืขืœ ื™ื“ื™ ื”ืคืงื•ื“ื”:
create table items(id integer primary key, name text);

INSERT INTO items (name) VALUES
    ('Item A'),
    ('Item B'),
    ('Item C'),
    ('Item A'),
    ('Item D'),
    ('Item E'),
    ('Item B'),
    ('Item F'),
    ('Item G'),
    ('Item A'); 
ืžื—ืงื• ืืช ื›ืœ ื”ืฉื•ืจื•ืช ื”ื›ืคื•ืœื•ืช, ื›ืœื•ืžืจ ื”ืฉืื™ืจื• ืžืงืกื™ืžื•ื ืฉื•ืจื” ืื—ืช ืœื›ืœ ืฉื ืฉืœ ืคืจื™ื˜. ืคื™ืชืจื•ืŸ ื”ืชืจื’ื™ืœ ื”ื–ื” ื”ื™ื” ื ืจืื” ืœื™ ืžืžืฉ ืคืฉื•ื˜ ื‘ืงืจื™ืื” ืจืืฉื•ื ื” ืื‘ืœ ืื—ืจื™ ื–ื” ื›ืฉื”ืชื—ืœืชื™ ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“ ื–ื” ื”ืกืชื‘ืš, ืื ื™ ืœื ื™ื•ื“ืข ืื ื”ื‘ืขื™ื” ื”ื™ื ืื ื™ ืื• SQL ืื– ืžืคืจืกื ื›ืืŸ ืขื ื”ืคื™ืชืจื•ืŸ ืฉืœื™. ืื ื™ืฉ ืœื›ื ื›ื™ื•ื•ื ื™ื ืคืฉื•ื˜ื™ื ื™ื•ืชืจ ืืœ ืชืชื‘ื™ื™ืฉื• ืœืฉืชืฃ. ื”ืชื—ืœืชื™ ืืช ื”ืคื™ืชืจื•ืŸ ืขื row_number ื• partition ื•ื›ื›ื” ืืคืฉืจ ืœืจืื•ืช ื‘ืงืœื•ืช ืขืจื›ื™ื ื›ืคื•ืœื™ื - ืืœื” ืฉื” row_number ืืฆืœื›ื ื’ื“ื•ืœ ืž-1:
select
    id,
    name,
    row_number() over (partition by name) as rn
from items
ืขื›ืฉื™ื• ื‘ืฉื‘ื™ืœ ืœื”ืฆื™ื’ ืจืง ืืช ื”ืžื–ื”ื™ื ืฉืœ ื”ืฉื•ืจื•ืช ื”ื›ืคื•ืœื•ืช ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ rn ื‘ืชื•ืš ืชื ืื™ where, ื•ื–ื” ื“ื•ืจืฉ ื”ื’ื“ืจืช CTE. ืกืš ื”ื›ืœ ื›ืš ืื ื™ ืžืฆื™ื’ ืืช ื”ืฉื•ืจื•ืช ื”ื›ืคื•ืœื•ืช ื‘ืœื‘ื“ (ืžืœื‘ื“ ื”ืจืืฉื•ื ื”):
with items_rn as (
  select
    id,  
    name,
    row_number() over (partition by name) as rn
  from items)
select id from items_rn where rn > 1
ื•ืืคื™ืœื• ื–ื” ืœื ื”ืกื•ืฃ ื›ื™ ื‘ืฉื‘ื™ืœ ืœืžื—ื•ืง ืื•ืชืŸ ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ื›ืœ ื”ื‘ืœื•ืง ื”ื–ื” ื‘ืชื•ืจ sub query, ืžื” ืฉืžื‘ื™ื ืื•ืชื ื• ืœ:
delete from items where id in

(with items_rn as (
  select
    id,
    name,
    row_number() over (partition by name) as rn
  from items)
select id from items_rn where rn > 1);

ToCode
1 419
ืฉืœื•ืฉื” ืขืงืจื•ื ื•ืช ื—ืฉื•ื‘ื™ื ืœื”ืฆืœื—ื” ื‘ืคืจื•ื™ืงื˜ื™ื ื”ืจืืฉื•ืŸ ื”ื•ื ืžื—ื•ื™ื‘ื•ืช. ื‘ืคืจื•ื™ืงื˜ ื™ื”ื™ื• ื‘ืขื™ื•ืช, ื“ื‘ืจื™ื ื™ื—ืจื’ื• ืžืœื•ื—ื•ืช ื–ืžื ื™ื, ื“ื‘ืจื™ื ืœื ื™ืขื‘ื“ื• ื›ืžื• ืฉืชื›ื ื ื•, ืœืคืขืžื™ื ื ื’ืœื” ืชื•ืš ื›ื“ื™ ืชื ื•ืขื” ืฉืขืœื™ื ื• ืœืขืฉื•ืช ืคืฉืจื•ืช ื›ื•ืื‘ื•ืช. ื”ืžื—ื•ื™ื‘ื•ืช ื”ื™ื ื”ื™ื›ื•ืœืช ืœืจืื•ืช ืืช ื”ืชื•ืฆืื” ื•ืœื”ืžืฉื™ืš ืœื”ืชืงื“ื ื‘ื›ื™ื•ื•ืŸ ืขื“ ืฉื–ื” ืžืฆืœื™ื—. ืขื™ืงืจื•ืŸ ืฉื ื™ ื”ื•ื ื”ื™ืงืฃ ื”ืคืจื•ื™ืงื˜ ื•ื–ื” ืžืชื—ื‘ืจ ืœืžื—ื•ื™ื‘ื•ืช. ื›ื›ืœืœ ื›ื›ืœ ืฉื”ื”ื™ืงืฃ ื’ื“ื•ืœ ื™ื•ืชืจ ื›ืš ื™ื•ืจื“ ื”ืกื™ื›ื•ื™ ืœื”ืชืžื™ื“ ืขื“ ื”ืกื•ืฃ. ื ื“ืžื™ื™ืŸ ืฉื™ืฆืื ื• ืœืคืจื•ื™ืงื˜ ืฉื™ื“ืจื•ื’ ืชืœื•ื™ื•ืช ืœืžืขืจื›ืช ื•ื‘ืืžืฆืข ื”ื“ืจืš ื’ื™ืœื™ื ื• ืฉืฆืจื™ืš ืœืฉื“ืจื’ ื’ื ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉืœ ื”ืฉืจืช ื•ืืช ื’ื™ืจืกืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื•ืžืคื” ืœืฉื ื”ื‘ื ื• ืฉื™ื”ื™ื” ื”ืจื‘ื” ื™ื•ืชืจ ื—ื›ื ืœื”ืจื™ืฅ ืืช ื”ืคืจื•ื™ืงื˜ ืžืชื•ืš ืงื•ื ื˜ื™ื™ื ืจ ื›ื“ื™ ืฉื™ื”ื™ื” ืงืœ ื™ื•ืชืจ ืœืฉื“ืจื’ ื”ื›ืœ ื‘ืžื›ื” ืื—ืช ื‘ืคืขืžื™ื ื”ื‘ืื•ืช. ื‘ืื•ืชื• ืจื’ืข ืื ื—ื ื• ืžืื•ื“ ืจื•ืฆื™ื ืœื—ื‘ืจ ื‘ื™ืŸ ืžืฉื™ืžืช ืฉื™ื“ืจื•ื’ ื”ืชืœื™ื•ืช ืœื‘ื™ืŸ ืžืฉื™ืžืช ื”ืžืขื‘ืจ ืœืงื•ื ื˜ื™ื™ื ืจื™ื - ื•ื™ืฉ ืœื–ื” ืกื™ื‘ื” ื˜ื•ื‘ื”, ื›ื™ ืื ื ืขื‘ื•ืจ ืขื›ืฉื™ื• ืœืงื•ื ื˜ื™ื™ื ืจื™ื ื ื—ืกื•ืš ืขื‘ื•ื“ืช ืฉื™ื“ืจื•ื’ ืžื™ื•ืชืจืช, ื•ื‘ื›ืœืœ ืื•ืœื™ ืื—ืจื™ ืฉื ืกื™ื™ื ืืช ื”ืฉื™ื“ืจื•ื’ ืืฃ ืื—ื“ ืœื ื™ืกื›ื™ื ืœื”ื™ื›ื ืก ืœืคืจื•ื™ืงื˜ ื ื•ืกืฃ ืฉืœ ืžืขื‘ืจ ืœืงื•ื ื˜ื™ื™ื ืจื™ื. ืื‘ืœ ืคื” ื‘ื“ื™ื•ืง ื’ื ืžืชื—ื‘ื ื”ืžื•ืงืฉ ืฉืขืœื•ืœ ืœืคื•ืฆืฅ ืœื ื• ืืช ื›ืœ ื”ืคืจื•ื™ืงื˜, ื›ื™ ืžืขื‘ืจ ืœืงื•ื ื˜ื™ื™ื ืจื™ื ื–ื” ืžืฉื”ื• ืฉืœื ืชื›ื ื ื• ืžืจืืฉ ื•ืื•ืœื™ ืื™ืŸ ืœื ื• ืžืกืคื™ืง ืžื—ื•ื™ื‘ื•ืช ื›ื“ื™ ืœื”ืชืžื•ื“ื“ ืขื ื”ืขื™ื›ื•ื‘ ืฉื™ื•ื•ืฆืจ ื‘ืœื•ื— ื”ื–ืžื ื™ื. ื•ืื—ืจื•ืŸ ื”ื•ื ืชื›ื ื•ืŸ ืžืจืืฉ. ืื ืื ื™ ื™ื•ื“ืข ืœืžื” ืื ื™ ื ื›ื ืก ืื ื™ ื™ื›ื•ืœ ืœื’ื™ื™ืก ืžืจืืฉ ืžืกืคื™ืง ืžื—ื•ื™ื‘ื•ืช ื›ื“ื™ ืœื”ืชืžื™ื“, ื•ื›ืฉื™ืฉ ืœื™ ืชื•ื›ื ื™ืช ืžืกื•ื“ืจืช ื•ืื ื™ ื™ื•ื“ืข ื‘ืื™ื–ื” ืฉืœื‘ ืื ื™ ื‘ืคืจื•ื™ืงื˜ ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœื”ืžืฉื™ืš ื•ืœื”ืชืžื™ื“. ืžืฆื“ ืฉื ื™ ืื ื”ื—ืœื˜ืชื™ ืœื‘ื ื•ืช ืคืจื•ื™ืงื˜ ืฆื“ ื•ืจืง ืื—ืจื™ ื—ืฆื™ ืฉื ื” ืฉืœ ืคื™ืชื•ื— ื’ื™ืœื™ืชื™ ืฉื‘ืฉื‘ื™ืœ ืฉื”ืžื•ืฆืจ ื”ื–ื” ื™ื”ื™ื” ื‘ืื•ื•ื™ืจ ืื ื™ ืฆืจื™ืš ืœืฉืœื ืืœืคื™ื™ื ื“ื•ืœืจ ื‘ื—ื•ื“ืฉ ืœืืžื–ื•ืŸ, ืื– ืื™ืŸ ืกื™ื›ื•ื™ ืฉืื ื™ ืืฉืื™ืจ ืืช ื”ืคืจื•ื™ืงื˜ ืฆื“ ื”ื–ื” ื‘ืื•ื•ื™ืจ ื™ื•ืชืจ ืžื›ืžื” ื™ืžื™ื ื›ื™ ื—ื‘ืœ ืขืœ ื”ื›ืกืฃ. ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉืื ื™ ื‘ื•ื—ืจ ื•ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื—ื™ื™ื‘ื•ืช ืœื”ืชืื™ื ืœืžื˜ืจื•ืช ืฉืœื™ ื•ื–ื” ืžืฉื”ื• ืฉืžืื•ื“ ืงืฉื” ืœืชืงืŸ ืื—ืจื™ ืฉื”ืคืจื•ื™ืงื˜ ืžื•ื›ืŸ.

ToCode
1 419
ืœื ื™ื•ื“ืข ืœืชื›ื ืช ื ื›ื ืกืชื™ ืœืœื™ื ืงื“ืื™ืŸ ืืชืžื•ืœ ืื—ืจื™ ื”ืจื‘ื” ื–ืžืŸ ืฉืœื ื”ื™ื™ืชื™ ืžื—ื•ื‘ืจ ื•ืื—ื“ ื”ืคื•ืกื˜ื™ื ืฉืชืคืกื• ืืช ืชืฉื•ืžืช ืœื‘ื™ ื”ื™ื” ืฉืœ ื‘ื—ื•ืจ ืฉื›ืชื‘ ื‘ื•ื˜ ืœื•ื•ื˜ืกืืค. ื”ืคื•ืกื˜ ื”ืชื—ื™ืœ ื‘ื”ื‘ื”ืจื” - ืื ื™ ืœื ื™ื•ื“ืข ืœืชื›ื ืช ืื‘ืœ ื”ื™ื” ืœื™ ืจืขื™ื•ืŸ ืœื‘ื•ื˜ ืื– ื ืขื–ืจืชื™ ื‘ AI ื›ื“ื™ ืœื‘ื ื•ืช ืื—ื“ ื•ืœื”ืขืœื•ืช ืื•ืชื•. ื•ื–ื” ืžืžืฉ ืœื ื”ืกื™ืคื•ืจ ื”ืจืืฉื•ืŸ ืฉืื ื™ ืฉื•ืžืข ืขืœ ืื ืฉื™ื ืฉืœื™ืžื“ื• ืืช ืขืฆืžื ืœืชื›ื ืช ื•ื‘ื ื• ืคืจื•ื™ืงื˜ ื‘ืขืœ ืžืฉืžืขื•ืช ื‘ืชื•ืš ืžืกืคืจ ืฉื‘ื•ืขื•ืช. ื”ืกื™ืคื•ืจื™ื ื”ืืœื” ืžื“ื”ื™ืžื™ื ื›ืœ ืคืขื ืžื—ื“ืฉ. ื™ื•ืชืจ ืžืฉื”ื ืžืœืžื“ื™ื ืื•ืชื ื• ืขืœ ืขืชื™ื“ ืชืคืงื™ื“ื ื• ื›ืžืชื›ื ืชื™ื (ืื ื™ ื—ื•ืฉื‘ ืฉื”ื™ื•ื ืฉ AI ื™ื›ืชื•ื‘ ืงื•ื“ ืœืžืขืจื›ื•ืช ืืžื™ืชื™ื•ืช ืขื“ื™ื™ืŸ ืžืื•ื“ ืจื—ื•ืง), ื”ื ืžืœืžื“ื™ื ืื•ืชื ื• ืขืœ ืชื”ืœื™ื›ื™ ืœืžื™ื“ื”, ืžื•ื˜ื™ื‘ืฆื™ื” ื•ืฉื™ืžื•ืฉ ื ื›ื•ืŸ ื‘ื›ืœื™ื: 1. ืžืขื•ืœื ืœื ื”ื™ื” ืงืœ ื™ื•ืชืจ ืœื‘ื ื•ืช ืžื•ืฆืจ ืชื•ื›ื ื” ืžืืคืก. ื”ืกื™ืคื•ืจ ืฉืœ ื”ื”ืคืฆื” ื ืคืชืจ ืžื–ืžืŸ ื›ืฉื”ืื™ื ื˜ืจื ื˜ ื”ื’ื™ืขื” ืœืชืคื•ืฆื” ืจื—ื‘ื”, ืื‘ืœ ื”ื™ื•ื ืขื ื” AI ื ืคืชืจื” ื’ื ื‘ืขื™ื™ืช ื”ื‘ื ื™ื™ื”. ื”ืฉื™ืœื•ื‘ ื”ื–ื” ืคื•ืชื— ื“ืœืช ืœืขืชื™ื“ ืžืื•ื“ ืžืขื ื™ื™ืŸ. 2. ืžืขื•ืœื ืœื ื”ื™ื” ืงืœ ื™ื•ืชืจ ืœืœืžื•ื“ ืชื›ื ื•ืช. ื”ื™ื›ื•ืœืช ืœืœืžื•ื“ ืžืฉื”ื• ืชื•ืš ื›ื“ื™ ืขื‘ื•ื“ื” ืขืœ ืคืจื•ื™ืงื˜ ืืžื™ืชื™, ื•ืœืงื‘ืœ ืžืขืจืš ืฉื™ืขื•ืจ ืžื•ืชืื ืขื‘ื•ืจืš ืขื ืžื•ืจื” ืคืจื˜ื™ ืฉืžืœื•ื•ื” ืื•ืชืš ื‘ื›ืœ ืฉื•ืจืช ืงื•ื“ ื”ื™ื ื‘ืœืชื™ ื ืชืคืกืช. ืœื™ืžื•ื“ ืชื›ื ื•ืช ื“ืจืš AI ื–ื• ืฉื™ื˜ืช ื”ืœื™ืžื•ื“ ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืฉืจืื™ืชื™ ืขื“ ื›ื” ื•ืœื“ืขืชื™ ื‘ืขืชื™ื“ ื”ืงืจื•ื‘ ื”ื™ื ืชื—ืœื™ืฃ ืืช ื”ืœื™ืžื•ื“ ื“ืจืš ื•ื™ื“ืื• ืฉื›ืœ ื›ืš ื”ืชืจื’ืœื ื• ืืœื™ื•. 3. ืœื ื‘ืจื•ืจ ืื™ื–ื” ืคืจื•ื™ืงื˜ื™ื ืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื ื™ืฆื˜ืจื›ื• ืœื›ืชื•ื‘ ื›ื“ื™ ืœื”ื•ื›ื™ื— ื™ื›ื•ืœืช ื•ืœื”ืชืงื‘ืœ ืœืขื‘ื•ื“ื”. ืขื“ ืœืคื ื™ ื›ืžื” ืฉื ื™ื ื”ื™ื” ื‘ืจื•ืจ ืฉืœื”ื’ื™ืข ืœืจืื™ื•ืŸ ืขื ืคืจื•ื™ืงื˜ ืžืฉืžืขื•ืชื™ ืฉื›ืชื‘ืช ื ื•ืชืŸ ืขืจืš ืžื•ืกืฃ ืžืฉืžืขื•ืชื™ ืœืžื•ืขืžื“ ื•ืžื’ื“ื™ืœ ืืช ืกื™ื›ื•ื™ื™ ื”ืงื‘ืœื” ืœืขื‘ื•ื“ื”. ื”ื™ื•ื ื›ืฉืืคืฉืจ ื‘ืœื™ ื™ื“ืข ื‘ืชื›ื ื•ืช ืœื‘ื ื•ืช ืžื•ืฆืจ ื“ื™ ืžื•ืฆืœื—, ื”ืคืจื•ื™ืงื˜ ืฉืื•ืชื• ื’'ื•ื ื™ื•ืจ ื™ืฆื˜ืจืš ืœื”ืจืื•ืช ื›ื“ื™ ืœื”ื•ื›ื™ื— ื™ื›ื•ืœืช ืขื‘ื•ื“ื” ืฆืจื™ืš ืœื”ื‘ื”ื™ืจ ืœืžืขืกื™ืง ืฉื™ืฉ ืคื” ื‘ืŸ ืื“ื ืขื ื™ื“ืข ื‘ื”ื ื“ืกืช ืชื•ื›ื ื” ื•ืœื ืžื™ืฉื”ื• ืฉืœื™ืžื“ ืืช ืขืฆืžื• ืชื›ื ื•ืช ื‘ืฉื‘ื•ืขื™ื™ื. ื”ื™ื›ื•ืœืช ืฉืœ AI ืœืขื–ื•ืจ ืœื ื• ืœื›ืชื•ื‘ ืงื•ื“ ืžืื•ื“ ืžืกื‘ื›ืช ืืช ื”ืจืื™ื•ื ื•ืช. ืœื“ืขืชื™ ื™ืฉ ืกื™ื›ื•ื™ ืœื ืžื‘ื•ื˜ืœ ืฉื‘ืงืจื•ื‘ ื ืคืกื™ืง ืœื—ืคืฉ ืคืจื•ื™ืงื˜ื™ื ื›ื”ื•ื›ื—ืช ื™ื›ื•ืœืช ื•ื ื—ื–ื•ืจ ืœื”ืกืชื›ืœ ืขืœ ื’ื™ืœื™ื•ื ื•ืช ืฆื™ื•ื ื™ื ืื• ืœื”ืชืžืงื“ ื‘ืฉืืœื•ืช ืชื›ื ื•ืช ืขืœ ื”ืœื•ื—.

ToCode
1 419
ืกืคืจื™ื•ืช ื‘ืกื™ืกื™ ื ืชื•ื ื™ื ื•ื˜ื™ืคื•ืœ ื‘ื”ื‘ื“ืœื™ื ื‘ื™ืŸ ื‘ืกื™ืกื™ ื”ื ืชื•ื ื™ื ื‘ Rails ื™ืฆืจืชื™ ื˜ื‘ืœื” ื‘ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืขื ืงื•ื“ ืฉื ืจืื” ื‘ืขืจืš ื›ืš:
create_table :users do |t|
  t.string :username
  t.string :email
  t.timestamps
end
ืืช ื”ืงื•ื“ ื”ื–ื” ืืคืฉืจ ืœื”ืคืขื™ืœ ืžื•ืœ ื›ืœ ื‘ืกื™ืก ื ืชื•ื ื™ื ื•ืจื™ื™ืœืก ื›ื‘ืจ ื™ื‘ื™ืŸ ืœื‘ื“ ืžื” ืœืขืฉื•ืช ื•ืื™ืš ืœื”ืชืื™ื ื‘ื™ืŸ string ื• timestamps ืœืกื•ื’ื™ ื”ื ืชื•ื ื™ื ืฉืœ ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื”ืกืคืฆื™ืคื™ ืฉื‘ื—ืจืชื. ื’ื ืกื™ืงื•ื•ืœื™ื™ื– ืฉืœ node ืขื•ื‘ื“ืช ื‘ืฆื•ืจื” ื“ื•ืžื” ื‘ Sequelize ื”ืžืžืฉืง ื“ื•ืจืฉ ื™ื•ืชืจ ืงื•ื“ ืื‘ืœ ืขื“ื™ื™ืŸ ื”ืกืคืจื™ื” ืžื˜ืคืœืช ื‘ื”ื‘ื“ืœื™ื ื‘ื™ืŸ ื‘ืกื™ืกื™ ื ืชื•ื ื™ื:
'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('Users', {
      id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true,
        allowNull: false
      },
      username: {
        type: Sequelize.STRING,
        allowNull: false
      },
      email: {
        type: Sequelize.STRING,
        allowNull: false
      },
      createdAt: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.NOW
      },
      updatedAt: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.NOW
      }
    });
  },

  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('Users');
  }
};
ืกืคืจื™ื•ืช ื‘ืกื™ืกื™ ื ืชื•ื ื™ื ืžื•ื“ืจื ื™ื•ืช ื™ื•ืชืจ ืœื•ืงื—ื•ืช ื’ื™ืฉื” ืฉื•ื ื”. ื–ื• ื“ื•ื’ืžื” ืžื”ืชื™ืขื•ื“ ืฉืœ ื“ืจื™ื–ืœ ืœื™ืฆื™ืจืช ื˜ื‘ืœื”:
export const users = mysqlTable('users', {
  id: bigint('id', { mode: 'number' }).primaryKey().autoincrement(),
  fullName: varchar('full_name', { length: 256 }),
}, (users) => ({
  nameIdx: index('name_idx').on(users.fullName),
}));
ื•ื–ื• ืžื™ื’ืจืฆื™ื” ื‘ืงื™ืกืœื™ ืฉื›ืชื•ื‘ื” ื‘ืฆื•ืจื” ืžืคื•ืจืฉืช ืขื‘ื•ืจ Postgresql:
  await db.schema
    .createTable('person')
    .addColumn('id', 'serial', (col) => col.primaryKey())
    .addColumn('first_name', 'varchar', (col) => col.notNull())
    .addColumn('last_name', 'varchar')
    .addColumn('gender', 'varchar(50)', (col) => col.notNull())
    .addColumn('created_at', 'timestamp', (col) =>
      col.defaultTo(sql\now()\).notNull(),
    )
    .execute()
ืœืžื” ื”ื ืขื•ืฉื™ื ืืช ื–ื”? ื•ืžื” ืขื“ื™ืฃ? ื™ืฉ ืฉื ื™ ื™ืชืจื•ื ื•ืช ืœืกืคืจื™ื” ืฉืœื ืžื˜ืคืœืช ื‘ื”ื‘ื“ืœื™ื ื‘ื™ืŸ ื‘ืกื™ืกื™ ื ืชื•ื ื™ื - ื”ืจืืฉื•ืŸ ื”ื•ื ื’ื•ื“ืœ ื”ืกืคืจื™ื”, ืื• ื™ื•ืชืจ ื ื›ื•ืŸ ื”ืงื•ื˜ืŸ ืฉืœื”. ืกืคืจื™ื” ืฉืฆืจื™ื›ื” ืœืขืฉื•ืช ืคื—ื•ืช ืชื”ื™ื” ื™ื•ืชืจ ืงื˜ื ื”, ืงืœื” ื™ื•ืชืจ ืœืชื—ื–ื•ืงื” ื•ืคื™ืชื•ื— ื•ืชื•ื›ืœ ืœืืžืฅ ืคื™ืฆ'ืจื™ื ื—ื“ืฉื™ื ืžื”ืจ ื™ื•ืชืจ. ืื ื™ ืžื•ื“ื” ืฉืื ืื ื™ ื”ื™ื™ืชื™ ื›ื•ืชื‘ ืกืคืจื™ื™ืช ื’ื™ืฉื” ืœื‘ืกื™ืก ื ืชื•ื ื™ื ื’ื ื”ื™ื™ืชื™ ืžืขื“ื™ืฃ ืœื•ื•ืชืจ ืขืœ ื”ืงื•ื“ ืฉืžื˜ืคืœ ื‘ื”ื‘ื“ืœื™ื ื‘ื™ืŸ ื‘ืกื™ืกื™ ื”ื ืชื•ื ื™ื ื•ืœื—ืกื•ืš ื”ืžื•ืŸ ื›ืื‘ ืจืืฉ. ื”ื™ืชืจื•ืŸ ื”ืฉื ื™ ื”ื•ื ื”ืฉืœื™ื˜ื” ืฉืกืคืจื™ื” ื›ื–ืืช ื™ื›ื•ืœื” ืœืืคืฉืจ ืœืžืชื›ื ืชื™ื - ืฉื‘ื’ืœืœ ืฉืขื›ืฉื™ื• ื›ื•ืชื‘ื™ื ืงื•ื“ ืกืคืฆื™ืคื™ ืœื‘ืกื™ืก ื ืชื•ื ื™ื ื™ื›ื•ืœื™ื ืœื”ืจื’ื™ืฉ ื™ื•ืชืจ ื‘ื ื•ื— ืœื”ืฉืชืžืฉ ื‘ื™ื›ื•ืœืช ืžืชืงื“ืžื•ืช ื™ื•ืชืจ ืฉืœ ื‘ืกื™ืก ื ืชื•ื ื™ื ืกืคืฆื™ืคื™, ืœื“ื•ื’ืžื” ืื ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉืื ื—ื ื• ืขื•ื‘ื“ื™ื ื‘ืคื•ืกื˜ื’ืจืก ื ื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ืคื•ืกื˜ื’ืจืก ืœืขื‘ื•ื“ื” ืขื JSON-ื™ื. ื”ืฉืืœื” ื”ืคืชื•ื—ื” ื›ืืŸ ื”ื™ื ื‘ืื™ื–ื• ืžื™ื“ื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืื• ืžืฉืชืžืฉื™ื ื‘ืื•ืชื• ืงื•ื“ ืกืคืจื™ื” ืฉืžื˜ืคืœ ื‘ื”ื‘ื“ืœื™ื ื‘ื™ืŸ ื‘ืกื™ืกื™ ื ืชื•ื ื™ื, ืื• ื”ืื ื‘ื›ืœืœ ืืคืฉืจ ืœื“ืžื™ื™ืŸ ืœื”ื—ืœื™ืฃ ื‘ืกื™ืก ื ืชื•ื ื™ื ื•ืฉื›ืœ ื”ืงื•ื“ ืคืฉื•ื˜ ื™ืžืฉื™ืš ืœืขื‘ื•ื“. ืœื“ืขืชื™ ื”ื™ื›ื•ืœืช ืœื”ื—ืœื™ืฃ ื‘ืกื™ืกื™ ื ืชื•ื ื™ื ื™ื›ื•ืœื” ืœืขื–ื•ืจ ื‘ืชื—ื™ืœืช ื”ืคื™ืชื•ื— ืื ืื ื—ื ื• ืขื“ื™ื™ืŸ ืœื ื‘ื˜ื•ื—ื™ื ืื™ื–ื” ื‘ืกื™ืก ื ืชื•ื ื™ื ื™ื”ื™ื” ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ ืขื‘ื•ืจ ื”ืคืจื•ื™ืงื˜, ืื‘ืœ ื›ื›ืœ ืฉื”ืคื™ืชื•ื— ืžืชืงื“ื ืžื”ืจ ืžืื•ื“ ืื ื—ื ื• ืžืฉืœื‘ื™ื ืžืžื™ืœื ื™ื›ื•ืœื•ืช ืกืคืฆื™ืคื™ื•ืช ืฉืœ ื‘ืกื™ืก ื ืชื•ื ื™ื ื•ืžืื‘ื“ื™ื ืืช ื”ื™ื›ื•ืœืช ืœืขื‘ื•ืจ. ื™ืฉ ืกื™ื›ื•ื™ ืžืื•ื“ ื ืžื•ืš ืฉืžื™ืฉื”ื• ื™ืจืฆื” ืœืงื—ืช ืคืจื•ื™ืงื˜ ืคืจื•ื“ืงืฉืŸ ื•ืœื”ืขื‘ื™ืจ ืื•ืชื• ืœื‘ืกื™ืก ื ืชื•ื ื™ื ืžืกื•ื’ ืื—ืจ. ืื ื—ื ื• ื›ืŸ ื›ืžืคืชื—ื™ื ืขื•ื‘ื“ื™ื ืขืœ ืžืกืคืจ ืคืจื•ื™ืงื˜ื™ื ื•ืคืจื•ื™ืงื˜ื™ื ืฉื•ื ื™ื ื›ืŸ ืขื•ื‘ื“ื™ื ืขืœ ื‘ืกื™ืกื™ ื ืชื•ื ื™ื ืฉื•ื ื™ื, ืœื›ืŸ ืžืคืชื—ื™ Rails ื™ื›ื•ืœื™ื ืœืขื‘ื•ืจ ื‘ื™ืŸ ืคืจื•ื™ืงื˜ Rails ืฉืžืชื—ื‘ืจ ืœ MySQL ืœืคืจื•ื™ืงื˜ ืจื™ื™ืœืก ืฉืžืชื—ื‘ืจ ืœืคื•ืกื˜ื’ืจืก ื•ืœื”ืฉืชืžืฉ ื‘ื™ื“ืข ืฉืœื”ื ื‘ืจื™ื™ืœืก ื›ื“ื™ ืœืชื—ื–ืง ื•ืœืคืชื— ืืช ื”ืžืขืจื›ืช, ื›ืžืขื˜ ื‘ืœื™ ืฉื™ืฆื˜ืจื›ื• ืœืœืžื•ื“ ื“ื‘ืจื™ื ื—ื“ืฉื™ื. ืžื” ื“ืขืชื›ื? ื™ืฆื ืœื›ื ืœื”ืขื‘ื™ืจ ืคืจื•ื™ืงื˜ ื‘ื™ืŸ ื‘ืกื™ืกื™ ื ืชื•ื ื™ื, ืื• ืœืขื‘ื•ื“ ื‘ืื•ืชื• ื–ืžืŸ ืขืœ ืคืจื•ื™ืงื˜ื™ื ืฉืžืชื—ื‘ืจื™ื ืœื‘ืกื™ืกื™ ื ืชื•ื ื™ื ืžืกื•ื’ื™ื ืฉื•ื ื™ื? ื›ืžื” ื—ืฉื•ื‘ ืœื›ื ืฉืกืคืจื™ื™ืช ื‘ืกื™ืกื™ ื”ื ืชื•ื ื™ื ืฉืœื›ื ืชืขื‘ื•ื“ ื‘ืฆื•ืจื” ื–ื”ื” ื‘ื™ืŸ ื‘ืกื™ืกื™ ื”ื ืชื•ื ื™ื ื”ืฉื•ื ื™ื ื•ืชืกืชื™ืจ ืžื›ื ืืช ื”ื”ื‘ื“ืœื™ื ื‘ื™ื ื™ื”ื?

ToCode
1 419
ื˜ื™ืค Hono ืฉื™ืžื• ืœื‘ ืœื ืชื™ื‘ื™ื ืฉืœื ืžืกืชื™ื™ืžื™ื ื‘ืœื•ื›ืกืŸ ืืช ื”ืงื•ื“ ื”ื‘ื ืœืงื—ืชื™ ืžืชื•ืš ื”ืชื™ืขื•ื“ ืฉืœ hono ื›ื“ื™ ืœื”ื’ื™ืฉ ืงื‘ืฆื™ื ืกื˜ื˜ื™ื™ื:
app.use('/client/*', serveStatic({ root: './'}));
ืื ื ื™ื’ืฉื™ื ืœื ืชื™ื‘ /client/foo.js ื™ื•ื’ืฉ ื”ืงื•ื‘ืฅ foo.js ืžืชื•ืš ืชื™ืงื™ื™ืช client. ืื ื ื™ื’ืฉื™ื ืœ /client/index.html ื™ื•ื’ืฉ ื”ืงื•ื‘ืฅ index.html ื•ืื ื ื™ื’ืฉื™ื ืœื ืชื™ื‘ /client/ ื™ื•ื’ืฉ ื’ื ื›ืŸ ื”ืงื•ื‘ืฅ index.html ื›ืฆืคื•ื™. ืื‘ืœ ืžื” ืงื•ืจื” ืื ื ื™ื’ืฉื™ื ืœ /client (ื‘ืœื™ ืœื•ื›ืกืŸ ื‘ืกื•ืฃ)? ื”ื•ื ื• ืžื ืกื” ืœืœื›ืช ืœืงืจืืชื ื• ื•ืื•ื˜ื•ืžื˜ื™ืช ืžื’ื™ืฉ ืฉื•ื‘ ืืช ืชื•ื›ืŸ ื”ืงื•ื‘ืฅ index.html. ื”ื‘ืขื™ื” ื”ื™ื ืฉื” URL ื ืฉืืจ ื‘ืœื™ ื”ืœื•ื›ืกืŸ, ื•ืœื›ืŸ ืื index.html ื›ื•ืœืœ ื”ืคื ื™ื” ืœืงื•ื‘ืฅ ืื—ืจ ื”ื”ืคื ื™ื” ืชื”ื™ื” ื™ื—ืกื™ืช ืœ / ื•ืœื ื™ื—ืกื™ืช ืœ /client. ืœื“ื•ื’ืžื” ื ื ื™ื— ืฉื‘ืชื•ืš index.html ืžื•ืคื™ืขื” ื”ืฉื•ืจื”:
<link rel="stylesheet" href="style.css" />
ื’ื™ืฉื” ืœืืชืจ ื“ืจืš ื”ื ืชื™ื‘ /client/ ืžื—ื–ื™ืจื” ืืช ืชื•ื›ืŸ ื”ืงื•ื‘ืฅ index.html. ื‘ื’ืœืœ ืฉื”ื ืชื™ื‘ ืžืกืชื™ื™ื ื‘ / ื”ื“ืคื“ืคืŸ ืžื ืกื” ืœืงื‘ืœ ืืช ืงื•ื‘ืฅ ื”ืขื™ืฆื•ื‘ ืžื”ื ืชื™ื‘ /client/style.css ื•ื”ื›ืœ ืขื•ื‘ื“. ืœืขื•ืžืช ื–ืืช ื’ื™ืฉื” ืœืืชืจ ื“ืจืš /client ืขื“ื™ื™ืŸ ืžื—ื–ื™ืจื” ืืช ืชื•ื›ืŸ ื”ืงื•ื‘ืฅ index.html, ืื‘ืœ ื”ืคืขื ื‘ื’ืœืœ ืฉื”ืชื™ืงื™ื™ื” ื”ืื—ืจื•ื ื” ื‘ื ืชื™ื‘ ื”ื™ื ื”ืชื™ืงื™ื™ื” ื”ืจืืฉื™ืช / ื”ื“ืคื“ืคืŸ ื™ื ืกื” ืœื˜ืขื•ืŸ ืืช /style.css ื‘ืœื™ ื”ืชื—ื™ืœื™ืช client, ื™ื™ื›ืฉืœ ื•ื”ืขื™ืฆื•ื‘ ืœื ื™ื•ืฆื’. ืคื™ืชืจื•ืŸ ืžื”ื™ืจ ื”ื•ื ืœื”ื•ืกื™ืฃ ื”ืคื ื™ื” ืž /client ืœ /client/ ืขื ื”ืงื•ื“ ื”ื–ื”:
app.get('/client', (c) => {
  return c.redirect('/client/', 301); // Permanent redirect
});
app.use('/client/*', serveStatic({ root: './'}));
ื•ืื ืืชื ืžื›ื™ืจื™ื ืคื™ืชืจื•ื ื•ืช ืื—ืจื™ื ืืœ ืชืชื‘ื™ื™ืฉื• ืœืฉืชืฃ ื‘ืชื’ื•ื‘ื•ืช.

ToCode
1 419
ืื™ืš ืœืงืจื•ื Code Review ืฉืœ Chat GPT ื”ื‘ืขื™ื” ืขื Chat GPT ื• Code Reviews ื”ื™ื ืฉืื™ืŸ ืœ GPT ืขื“ื™ื™ืŸ ืžืกืคื™ืง ืงื•ื ื˜ืงืกื˜ ื‘ืฉื‘ื™ืœ ืœื”ื‘ื™ืŸ ืœืžื” ื‘ื ื™ืชื™ ื“ื‘ืจื™ื ื›ืžื• ืฉื‘ื ื™ืชื™ ื•ืœื›ืŸ ื”ื•ื ื™ืžืœื™ืฅ ืขืœ Best Practices ื›ืœืœื™ื™ื, ื’ื ื›ืฉื–ื” ืœื ื”ื›ืจื—ื™, ื•ื’ื ื™ื›ื•ืœ ืœื˜ืขื•ืช ื•ืœื—ืฉื•ื‘ ืฉืœื ื”ืฉืชืžืฉืชื™ ื‘ Best Practice ืžืกื•ื™ื ืืคื™ืœื• ืฉื›ืŸ. ื”ื ื” ืฉืชื™ ื“ื•ื’ืžืื•ืช ืงื˜ื ื•ืช ืฉืขื–ืจื• ืœื™ ืœืจืื•ืช ืžื” GPT ืจื•ืื” ื•ืžื” ื”ื•ื ืžืคืกืคืก. ืฉื™ืคื•ืจ ืงื•ื“ ืจื•ื‘ื™ ืฉืœื—ืชื™ ืœื• ืœื‘ื“ื™ืงื” ืืช ื”ืคื•ื ืงืฆื™ื” ื”ื‘ืื” ื‘ืจื•ื‘ื™:
require 'set'

def count_valid_requests(uniqueCodes, requests)
    uniqueCodesSet = Set.new(uniqueCodes)
    return requests.count { |r| uniqueCodesSet.include?(r) }
end
ื”ืงื•ื“ ืขื•ื‘ื“ ื•ืœื ื›ืชื•ื‘ ืจืข ืื‘ืœ ืืคื™ืœื• ื‘ืฉืชื™ ืฉื•ืจื•ืช ืฉืœ ืงื•ื“ ื™ืฉ ืคื” ื›ืžื” ื“ื‘ืจื™ื ืฉืžืชื›ื ืชื™ ืจื•ื‘ื™ ืœื ืื•ื”ื‘ื™ื ืœืจืื•ืช - ื”ืกื˜ื ื“ืจื˜ ืœื’ื‘ื™ ืฉืžื•ืช ื”ืžืฉืชื ื™ื ื‘ืจื•ื‘ื™ ื”ื•ื ืœื”ืฉืชืžืฉ ื‘ืงื• ืชื—ืชื™ ืœื”ืคืจื“ื” ื‘ื™ืŸ ื”ืžื™ืœื™ื ื•ืœื ืœื”ืฉืชืžืฉ ื‘ return ื‘ืฆื•ืจื” ืžืคื•ืจืฉืช. ChatGPT ืฉื ืœื‘ ืœืฉืชื™ ื”ื‘ืขื™ื•ืช ื•ื™ืฆืจ ื’ื™ืจืกื” ืžืชื•ืงื ืช ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื‘ืœื™ ื‘ืขื™ื”:
require 'set'

def count_valid_requests(unique_codes, requests)
  unique_codes_set = Set.new(unique_codes)
  requests.count { |request| unique_codes_set.include?(request) }
end
ื›ื›ืœ ืฉื”ืงื•ื“ ืžืกืชื‘ืš ื”ื˜ื™ืคื™ื ืฉืœ ChatGPT ืขื“ื™ื™ืŸ ื‘ืขืœื™ ืขืจืš ืื‘ืœ ื“ื•ืจืฉื™ื ื™ื•ืชืจ ืžืืžืฅ ื‘ืงืจื™ืื”. ื”ื ื” ืคื•ื ืงืฆื™ื” ื ื•ืกืคืช ืฉืฉืœื—ืชื™ ืœื•, ื”ืคืขื ืžืคืจื•ื™ืงื˜ ืจื™ื™ืœืก:
def cancel
    wi = WorkshopInstance.find(params[:id])
    authorize! :attend, wi
    wi.users.delete(current_user)

    render json: {
             attending: attending
           }
  end
ื›ืืŸ ื”ืคืœื˜ ื›ื‘ืจ ื”ื™ื” ื”ืจื‘ื” ื™ื•ืชืจ ืืจื•ืš - ื” GPT ืฉื ืœื‘ ืฉืื™ืŸ ืœื™ ืงื•ื“ ื˜ื™ืคื•ืœ ื‘ืฉื’ื™ืื•ืช, ืฉ find ืขืœื•ืœื” ืœื–ืจื•ืง ืฉื’ื™ืื” ื•ื”ืžืœื™ืฅ ืœื”ื—ืœื™ืฃ ืื•ืชื” ื‘ find_by ื•ืื—ืจื™ื” ืงื•ื“ ืœื‘ื“ื™ืงื” ืฉื’ื™ืื”. ืื ื™ ืœื ืื•ื”ื‘ ืืช ื”ื”ืžืœืฆื” ื”ื–ืืช ื›ื™ ืื find ื›ื‘ืจ ืžืžื™ืœื ื–ื•ืจืง ืฉื’ื™ืื” ืื– ืœื ื‘ืจื•ืจ ืœืžื” ืœื”ื—ืœื™ืฃ ืื•ืชื• ื‘ืคื•ื ืงืฆื™ื” ืฉืœื ื–ื•ืจืงืช ืฉื’ื™ืื” ื•ืื– ืœื”ื•ืกื™ืฃ ื‘ื“ื™ืงื” ื•ืœื–ืจื•ืง ืืช ื”ืฉื’ื™ืื” ื‘ืฆื•ืจื” ื™ื–ื•ืžื”. ื”ื•ื ื›ืŸ ืฉื ืœื‘ ืฉื”ืฉืชืžืฉืชื™ ื‘ืžืฉืชื ื” attending ืฉืœื ืžื•ื’ื“ืจ ื‘ืคื•ื ืงืฆื™ื”, ื•ื”ืžืœื™ืฅ ืœื”ื—ืœื™ืฃ ืืช delete ื‘ delete_by ืฉื‘ืคื•ืขืœ ืงื•ืจืืช ืœ delete_all ื”ืžื”ื™ืจื” ื‘ื”ืจื‘ื” - ืฉื ื™ ื˜ื™ืคื™ื ืฉื›ื“ืื™ ืœื™ื™ืฉื. ืงื•ื“ JavaScript ืื—ืจื™ ื–ื” ื ืชืชื™ ืœื• ืœืงืจื•ื ืืช ื”ืงื•ื“ ื”ื‘ื ื‘ JavaScript:
const evtSource = new EventSource("/count");
const ti = document.querySelector('input');

evtSource.onmessage = (event) => {
  ti.value = event.data;
};

document.querySelector('button').addEventListener('click', async () => {
  await fetch('/count', {
    method: "POST",
    body: JSON.stringify({ value: ti.value }),
    contentType: 'application/json',
  });
});
ื•ืฉื•ื‘ ื”ื•ื ื”ืชืœื•ื ืŸ ืงื•ื“ื ื›ืœ ืขืœ ื–ื” ืฉืื™ืŸ ืงื•ื“ ื˜ื™ืคื•ืœ ื‘ืฉื’ื™ืื•ืช (ื‘ืžืงืจื” ื”ื–ื” ื”ื•ื ืœื ื ื—ื•ืฅ), ื•ื˜ืขืŸ (ืœื“ืขืชื™ ืœื ื‘ืฆื“ืง) ืฉืืคืฉืจ ืœืฉืคืจ ื‘ื™ืฆื•ืขื™ื ืื ืขื•ืฉื™ื ืืช ื” querySelector ื‘ืžืจื•ื›ื– ื•ืฉื•ืžืจื™ื ืืช ื”ืชื•ืฆืื•ืช ื‘ืžืฉืชื ื™ื. ื”ื•ื ื’ื ื—ืฉื‘ ืฉืฆืจื™ืš ืœื”ืคืขื™ืœ parseInt ืขืœ value ื•ืœื‘ื“ื•ืง ืฉื”ืชืงื‘ืœ ืžืกืคืจ, ืœืžืจื•ืช ืฉืื™ืŸ ืœื–ื” ื–ื›ืจ ื‘ืงื•ื“ ืฉื”ื“ื‘ืงืชื™. ืžืฆื“ ืฉื ื™ ื”ื•ื ืžืฆื“ ื™ืคื” ืืช ื”ื˜ืขื•ืช ืฉืœื™ ื‘ื”ื’ื“ืจืช ื”ื›ื•ืชืจืช contentType, ืฉืฆืจื™ื›ื” ืœื”ื™ื•ืช Content-Type. ืกืš ื”ื›ืœ ืื—ื•ื– ื” False Positives ื”ื•ื ืขื“ื™ื™ืŸ ื’ื‘ื•ื”. ื‘ืื•ืคืŸ ื›ืœืœื™ ื›ืฉื™ืฉ ื–ืžืŸ ืื ื™ ื—ื•ืฉื‘ ืฉืจืฆื•ื™ ืœื”ื“ื‘ื™ืง ื—ืœืงื™ื ืžื”ืงื•ื“ ืฉืœื ื• ืœ Chat GPT ื›ื“ื™ ืœืงื‘ืœ ื˜ื™ืคื™ื ืžื•ืขื™ืœื™ื ื•ืœืœืžื•ื“ ื™ื•ืชืจ ืขืœ ื”ืงื•ื“, ืื‘ืœ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืฉืชืฆื˜ืจื›ื• ืœื”ืฉืงื™ืข ื–ืžืŸ ืœืคืขื ื— ืืช ื”ืชืฉื•ื‘ื” ืฉืœื• ื•ืœื”ืคืจื™ื“ ืขื™ืงืจ ืžื˜ืคืœ.

ToCode
1 419
ืื‘ืœ ืžื™ ื™ืชื—ื–ืง ืืช ื–ื”? ื›ืžื” ืกื™ืžื ื™ื ื—ืฉื•ื“ื™ื ืฉื›ื“ืื™ ืœืฉื™ื ืœื‘ ื›ื‘ืจ ื‘ื–ืžืŸ ื›ืชื™ื‘ืช ื”ืงื•ื“ ืฉืžืžืฉ ืขื•ื“ ืจื’ืข ืื™ ืืคืฉืจ ื™ื”ื™ื” ืœืชื—ื–ืง ืื•ืชื•: 1. ืฆืจื™ืš ืœื”ืชืงื™ืŸ ืชื•ื›ื ื•ืช ืžื™ื•ื—ื“ื•ืช ื‘ืฉื‘ื™ืœ ืœื”ืจื™ืฅ ืืช ื”ืคืจื•ื™ืงื˜, ื•ื”ืชื•ื›ื ื•ืช ื”ืืœื” ื—ื“ืฉื•ืช ื‘ืžื™ื•ื—ื“ ืื• ืžืฉืชื ื•ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช. 2. ื”ืคืจื•ื™ืงื˜ ืžืฉืชืžืฉ ื‘ื˜ื›ื ื™ืงืช ืขื‘ื•ื“ื” ืฉืืฃ ืื—ื“ ืœื ื—ืฉื‘ ืขืœื™ื” ืงื•ื“ื (ื–ื” ื’ืื•ื ื™! ื™ื“ืขืชื™ ืฉื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื‘ื ื•ืช ORM ื‘ืขืฆืžื ื•). 3. ื”ืคืจื•ื™ืงื˜ ืžืฉืชืžืฉ ื‘ืฉืคืช ืชื›ื ื•ืช ืžืžืฉ ืžื™ื•ื—ื“ืช ื•ืื™ื–ื•ื˜ืจื™ืช, ืื• ืขื“ื™ื™ืŸ ื—ื“ืฉื” ื•ืžืชืขื“ื›ื ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช (ื›ืŸ Julia ืื ื™ ืžืกืชื›ืœ ืขืœื™ื™ืš). 4. ืื™ืŸ ื“ืจืš ืœื”ืคืขื™ืœ ืืช ื”ืคืจื•ื™ืงื˜ ืขืœ ืžื—ืฉื‘ ืคื™ืชื•ื—, ื”ื›ืœ ืจืฅ ืจืง ื‘ืขื ืŸ. ื”ืจืฆื” ืžืงื•ืžื™ืช ืžืฉืชืžืฉืช ื‘ืกื˜ืื‘ื™ื. 5. ื‘ื—ื•ื“ืฉื™ื ื”ืื—ืจื•ื ื™ื ื›ืœ ืคืขื ืฉื”ื™ื” ืชื™ืงื•ืŸ ืงื˜ืŸ ื”ืžืคืชื—ื™ื ืœื ื”ื•ืกื™ืคื• ื‘ื“ื™ืงื” ื™ื—ื“ ืขื ื”ืชื™ืงื•ืŸ ื›ื™ ืœื ื”ื™ื” ื–ืžืŸ. 6. ืงื•ื“ ืžืฉืชื ื” ืื‘ืœ ื”ืชื™ืขื•ื“ ืฉืžืœื•ื•ื” ืื•ืชื• ื ืฉืืจ ืœืœื ืฉื™ื ื•ื™. 7. ืืฃ ืื—ื“ ืœื ื™ื•ื“ืข ืื™ืš ืื• ืžืชื™ ืฆืจื™ืš ืœืฉื“ืจื’ ืชืœื•ื™ื•ืช. ื›ืœ ืืœื” ืกื™ืžื ื™ื ืฉืืคืฉืจ ืœื–ื”ื•ืช ืืคื™ืœื• ืœืคื ื™ ืฉืžืชื—ื™ืœื™ื ืœืขื‘ื•ื“ ืขืœ ืคืจื•ื™ืงื˜, ื•ื™ื›ื•ืœื™ื ืœืชืช ืœื›ื ืื™ื ื“ื™ืงืฆื™ื” ื›ืžื” ื–ืžืŸ ืขื•ื“ ืืคืฉืจ ื™ื”ื™ื” ืœื”ื•ืกื™ืฃ ืงื•ื“ ื‘ืœื™ ืฉื”ื›ืœ ื™ืชืžื•ื˜ื˜.

ToCode
1 419
ื‘ื—ื™ืจืช ื›ืœื™ื ืœืคืจื•ื™ืงื˜ ืฆื“ ืžื™ืฉื”ื• ืฉื™ืชืฃ ื”ืฉื‘ื•ืข ื‘ืจื“ื™ื˜ ืคืจื•ื™ืงื˜ ืฉื•ืœื” ืžื•ืงืฉื™ื ืฉื›ืชื‘ ื‘ื™ื•ื. ื”ืกื˜ืืง ื”ื˜ื›ื ื•ืœื•ื’ื™? tailwind ื• next.js, ื•ื›ืŸ ื–ื” ื›ื•ืœืœ ื—ื™ื‘ื•ืจ ืœื“ื•ืžื™ื™ืŸ ื•ื”ืขืœืื” ืœืจืฉืช. ื”ื™ื™ืชื™ ืฉืžื— ืœืจืื•ืช ืืช ื”ืงื•ื“ ืื‘ืœ ืืคื™ืœื• ื‘ืœื™ ืื ื™ ืžื”ืžืจ ืฉืื™ืŸ ืฉื ืจื™ืืงื˜ ืจืื•ื˜ืจ ื•ื’ื ืœื ืจื™ื“ืืงืก, ืœื ื‘ื“ื™ืงื•ืช ื•ืœื ืชื™ืขื•ื“. ื›ืฉื”ืžื˜ืจื” ื”ื™ื ืœื‘ื ื•ืช ืžืฉื”ื• ืžื”ืจ ืœื ืฆืจื™ืš ืœืฉื‘ื•ืจ ืืช ื”ืจืืฉ ืขืœ ื›ืœื™ื ืžืชื•ื—ื›ืžื™ื ืžืกืคื™ืง ืœื”ืคืขื™ืœ IDE ื•ืœื”ืชื—ื™ืœ ืœื›ืชื•ื‘ ืงื•ื“. ื›ืŸ ืฆืจื™ืš ืœืฉื™ื ืœื‘ ืœืฉืชื™ ื˜ืขื•ื™ื•ืช ืฉืื ืฉื™ื ืขื•ืฉื™ื ืกื‘ื™ื‘ ื”ืฆืœื—ื•ืช ื›ืืœื”- 1. ืžืคืชื—ื™ื ืจื‘ื™ื ื—ื•ืฉื‘ื™ื ืฉืื ื”ื ื”ืฆืœื™ื—ื• ืœื‘ื ื•ืช ืคืจื•ื™ืงื˜ ืฆื“ ืžื”ื™ืจ ื‘ืกื˜ืืง ื˜ื›ื ื•ืœื•ื’ื™ "ืคืฉื•ื˜", ืื– ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘ืื•ืชื• ืกื˜ืืง ื˜ื›ื ื•ืœื•ื’ื™ ื’ื ืœืคืจื•ื™ืงื˜ื™ื ืžืกื•ื‘ื›ื™ื. 2. ืžืคืชื—ื™ื ืจื‘ื™ื ืื—ืจื™ื ื—ื•ืฉื‘ื™ื ืฉืื™ืŸ ืžืฆื‘ ืœื‘ื ื•ืช ืžืฉื”ื• ื‘ื™ื•ื ื›ื™ ืจืง ื”ืชืงื ืช ื”ื›ืœื™ื ื•ื”ื’ื“ืจื•ืช ืœืคืจื•ื™ืงื˜ ื—ื“ืฉ ื›ื“ื™ ืฉื™ื”ื™ื” ื‘ื ื•ื™ ื›ืžื• ืฉื™ืฉ ืœื”ื ื‘ืคืจื•ื™ืงื˜ ื”ืžืกื•ื‘ืš ื‘ืขื‘ื•ื“ื” (ืจื™ื“ืืงืก, ื˜ื™ื™ืคืกืงืจื™ืคื˜, ืงื•ื‘ืจื ื˜ืก, ื‘ื“ื™ืงื•ืช, ืชื™ืขื•ื“) ืœื•ืงื— ืฉื‘ื•ืข. 3. ืžืคืชื—ื™ื ืจื‘ื™ื ืื—ืจื™ื ื—ื•ืฉื‘ื™ื ืฉืื ื›ื‘ืจ ื”ื ื‘ื•ื ื™ื ืคืจื•ื™ืงื˜ ืฆื“ ืขื“ื™ืฃ ืœื‘ื ื•ืช ืžืฉื”ื• ื‘ืกื˜ืืง ื˜ื›ื ื•ืœื•ื’ื™ ืฉื”ื ืœื ืžื›ื™ืจื™ื, ื•ืฉื•ื‘ ืžื‘ื–ื‘ื–ื™ื ื™ืžื™ื ื•ืฉื‘ื•ืขื•ืช ืจืง ืขืœ ื‘ื—ื™ืจืช ื”ื›ืœื™ื. ื”ื’ืžื™ืฉื•ืช ืฉืžืืคืฉืจืช ืœื”ืชืื™ื ืืช ื”ื›ืœื™ ืœืคืจื•ื™ืงื˜, ืœื‘ื—ื•ืจ ืคืจื•ื™ืงื˜ ืงื˜ืŸ ื•ืœื”ืฆืœื™ื— ืœื‘ื ื•ืช ืื•ืชื• ื‘ื™ื•ื ื”ื™ื ืžืจืฉื™ืžื” - ื’ื ืื ื”ืชื•ืฆืื” ื”ื™ื ื‘ืกืš ื”ื›ืœ ืžืฉื—ืง ืฉื•ืœื” ืžื•ืงืฉื™ื.

ToCode
1 419
ืื– OpenAI ืขื‘ืจื• ืœืจืžื™ืงืก ื”ืจืฉืช ื’ื•ืขืฉืช ืกื‘ื™ื‘ ื”ืžืขื‘ืจ ืฉืœ OpenAI ืž next ืœ remix. ื›ื•ืœื ืžืฉืชืคื™ื ื—ื•ื•ื™ื•ืช ื•ืžืกื‘ื™ืจื™ื ื›ืžื” ื’ื ืœื”ื ื”ื™ื” ืงืฉื” ืœืขื‘ื•ื“ ืขื next ื•ืื™ืš ื” App Router ื”ื—ื“ืฉ ืžืกื•ื‘ืš ืžื“ื™. ืื ืกื” ืœืขืฉื•ืช ืงืฆืช ืกื“ืจ: 1. ืืคืœื™ืงืฆื™ื•ืช ืขืžื•ื“-ื™ื—ื™ื“ (SPA) ื–ื” ืžืกื•ื‘ืš. ื–ื” ืชืžื™ื“ ื”ื™ื”. ืกืคืจื™ื•ืช ืœืคื™ืชื•ื— SPA ื›ืžื• react-router ืงื™ื™ืžื•ืช ื‘ื“ื™ื•ืง ื‘ื’ืœืœ ืฉื–ื” ืžืกื•ื‘ืš ื•ืฉืœืืฃ ืื—ื“ ืื™ืŸ ื›ื— ืœื˜ืคืœ ื‘ืœื—ื™ืฆื•ืช ืขืœ ื›ืคืชื•ืจ "ืื—ื•ืจื”" ื•ืกื™ืžื ื™ื•ืช ื‘ื“ืคื“ืคืŸ. ืื ื—ื ื• ื‘ื•ื ื™ื SPA ื›ื™ ืœืคืขืžื™ื ื–ื” ื ื•ืชืŸ ื—ื•ื•ื™ืช ืฉื™ืžื•ืฉ ื˜ื•ื‘ื” ื™ื•ืชืจ. 2. ืจื™ื ื“ื•ืจ ื‘ืฆื“ ืฉืจืช (SSR) ื–ื” ืืคื™ืœื• ืขื•ื“ ื™ื•ืชืจ ืžืกื•ื‘ืš, ื›ื™ ื™ืฉ ืœื ื• ืืช ื›ืœ ื”ืกื™ื‘ื•ืš ืฉืœ SPA ื•ื‘ื ื•ืกืฃ ืฆืจื™ื›ื™ื ืœื”ืชืžื•ื“ื“ ืขื ื ื™ื”ื•ืœ Cache ื‘ืฆื“ ืฉืจืช ื•ืœื•ื•ื“ื ืฉื”ืงื•ื“ ืฉืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืœื ืžืคืขื™ืœ ื“ื‘ืจื™ื ืฉืฆืจื™ื›ื™ื ืืช window ื›ืฉื”ื•ื ืจืฅ ื‘ืฉืจืช. ืื ื—ื ื• ืžืจื ื“ืจื™ื ื‘ืฆื“ ืฉืจืช ื›ื™ ืžื ื•ืขื™ ื—ื™ืคื•ืฉ, ืงื•ืจืื™ ืžืกืš ื•ืขื•ื“ ื›ืœื™ื ืจื‘ื™ื ืื—ืจื™ื ืื•ื”ื‘ื™ื ืœืงื‘ืœ ืืช ื” HTML ืžื•ื›ืŸ ื’ื ืื ื”ื ืœื ืžืจื™ืฆื™ื JavaScript. 3. ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืฉืจืช (RSC) ื–ื” ืืคื™ืœื• ืขื•ื“ ื™ื•ืชืจ ืžืกื•ื‘ืš ืžืจื™ื ื“ื•ืจ ืฆื“ ืฉืจืช. ื‘ืจื™ื ื“ื•ืจ ืฆื“ ืฉืจืช ืจื’ื™ืœ ื›ืœ ื”ืงื•ื“ ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืžืฉืžืฉ ืœื‘ื ื™ื™ืช ื” HTML ื•ืื– ื ืฉืœื— ืœื“ืคื“ืคืŸ ื›ื“ื™ ืœื”ื•ืกื™ืฃ ืืช ื” JavaScript ื•ืงื•ื“ ื”ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืขื™ื. ื‘ืžื‘ื ื” ืฉืœ ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืฉืจืช ืฆืจื™ืš ืœื‘ื—ื•ืจ ืžืจืืฉ ืื™ื–ื” ืงื•ืžืคื•ื ื ื˜ื•ืช ื›ื•ืœืœื•ืช ืงื•ื“ JavaScript ืฉืฆืจื™ืš ืœืจื•ืฅ ื‘ื“ืคื“ืคืŸ (ืืœื” ื”"ืื™ื™ื" ืื• ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืœืงื•ื—) ื•ืืช ื”ืงื•ื“ ืฉืœื”ืŸ ืื ื• ืฉื•ืœื—ื™ื ืœื“ืคื“ืคืŸ, ื•ื™ืฉ ืงื•ืžืคื•ื ื ื˜ื•ืช ืื—ืจื•ืช ืฉืื™ืŸ ืœื”ืŸ ืงื•ื“ ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืขื™ื ื•ืœื›ืŸ ื ืขื“ื™ืฃ ืœื ืœืฉืœื•ื— ืืช ื”ืงื•ื“ ืฉืœื”ืŸ ืœื“ืคื“ืคืŸ. ื›ื›ื” ื‘ืืคืœื™ืงืฆื™ื” ื’ื“ื•ืœื” ืืคืฉืจ ืœืฉืœื•ื— ืœื“ืคื“ืคืŸ ืคื—ื•ืช ืงื•ื“ ื•ืœืงื‘ืœ ืฉื™ืคื•ืจ ื‘ื–ืžื ื™ ื”ื˜ืขื™ื ื” ื•ื‘ื—ื•ื•ื™ืช ื”ืžืฉืชืžืฉ. ื”ื ื˜ื™ื” ืฉืœ ื™ื•ืชืจ ืžื“ื™ ืžืคืชื—ื™ื ื”ื™ื ืœื‘ื—ื•ืจ ืืช ืฉื™ื˜ืช ื”ืขื‘ื•ื“ื” ื”ื›ื™ ืžืกื•ื‘ื›ืช ื›ื™ ืื•ืœื™ ื ืฆื˜ืจืš ืืช ื–ื” ื‘ืขืชื™ื“. ื–ื” ืžื” ืฉืงืจื” ื‘ OpenAI, ืฉื‘ื•ื ื™ื ืืคืœื™ืงืฆื™ื™ืช SPA ืื‘ืœ ื”ืฉืชืžืฉื• ื‘ next.js ืฉืžืชืื™ื ืœืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืฉืจืช. ื‘ืฉืœื‘ ืžืกื•ื™ื ื”ื ื›ื ืจืื” ื”ื‘ื™ื ื• ืฉื”ื ืžืฉืœืžื™ื ื™ื•ืชืจ ืžื“ื™ ืขืœ ื”ื‘ื—ื™ืจื” ื”ื˜ื›ื ื•ืœื•ื’ื™ืช ืฉืœื”ื ื•ืขื‘ืจื• ืœืืคืœื™ืงืฆื™ื™ืช SPA ืจื’ื™ืœื” ืขื ืจืžื™ืงืก, ืฉืื’ื‘ ื”ืกืคื™ืง ืœืื—ืจื•ื ื” ืœื”ืชืžื–ื’ ื—ื–ืจื” ืœืชื•ืš React Router. ืžื™ ืฉืžื—ืคืฉ ืชื—ืžื•ืฉืช ืœืื™ื–ื” ื•ื™ื›ื•ื— ื“ืžื™ื•ื ื™ ื‘ื™ืŸ next.js ืœ react router ืœื“ืขืชื™ ืœื ื™ืžืฆื ืื•ืชื” ื›ืืŸ. ืื ื›ื‘ืจ ื™ืฉ ืคื” ืจืง ื—ื™ื“ื•ื“ ืฉืœ ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ืฉื ื™ ื”ื›ืœื™ื ื•ื”ื‘ื ื” ื™ื•ืชืจ ืžื“ื•ื™ืงืช ืฉืœ ืžื” ืžืชืื™ื ืœืžื”. ื‘ืื•ืคืŸ ื›ืœืœื™ ื”ืชืืžื” ืฉืœ ืฉื™ื˜ืช ื”ืขื‘ื•ื“ื” ืœืืชื’ืจ ืื™ืชื• ืื ื—ื ื• ืžืชืžื•ื“ื“ื™ื ื•ืœืื™ืœื•ืฆื™ื ื”ื˜ื›ื ื•ืœื•ื’ื™ื™ื ืฉืœ ื”ืžืขืจื›ืช ืฉืœื ื• ื–ืืช ื”ื“ืจืš ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœื‘ื—ื•ืจ ืกืคืจื™ื•ืช ืœืคืจื•ื™ืงื˜ ื”ื‘ื ืฉืœื ื•.

ToCode
1 419
ื ื™ืกื•ื™ Hono - ืกื™ื ื›ืจื•ืŸ ืขืจืš ื‘ื™ืŸ ื“ืคื“ืคื ื™ื ื”ืชืžื™ื›ื” ืฉืœ ื“ื™ื ื• ื‘ Web Standards ื”ื‘ื™ืื” ืœื–ื” ืฉืžืื•ื“ ืงืœ ืœื›ืชื•ื‘ ืงื•ื“ ื”ื•ื ื• ืฉืžืฉืชืžืฉ ื‘ Streams ื›ื“ื™ ืœืงื‘ืœ ื”ื•ื“ืขื•ืช ืžื’ื•ืœืฉื™ื ื•ืœื“ื•ื•ื— ืื•ืชืŸ ื”ืœืื” ืœื’ื•ืœืฉื™ื ื”ืื—ืจื™ื ื‘ืืชืจ, ื”ื›ืœ ื‘ SSE. ื‘ื•ืื• ื ืจืื” ืื™ืš ืœื—ื‘ืจ ืืช ื”ื—ื•ื˜ื™ื ื‘ืคืจื•ื™ืงื˜ ื“ื™ื ื• ื• Hono. ืžื” ืื ื—ื ื• ื‘ื•ื ื™ื ื”ืืชืจ ื™ื›ื™ืœ ืชื™ื‘ืช ื˜ืงืกื˜ ื•ื›ืคืชื•ืจ. ืื ื™ืฉ ืžืกืคืจ ื’ื•ืœืฉื™ื ืฉืžื—ื•ื‘ืจื™ื ืœืืชืจ ื•ืื—ื“ ืžื”ื ืœื•ื—ืฅ ืขืœ ื”ื›ืคืชื•ืจ ืื– ื”ืขืจืš ื‘ืชื™ื‘ืช ื”ื˜ืงืกื˜ ื™ื™ืฉืœื— ืœื›ืœ ื”ื“ืคื“ืคื ื™ื ืฉืœ ื”ื’ื•ืœืฉื™ื ื”ืื—ืจื™ื ื•ื™ืขื•ื“ื›ืŸ ืขืœ ื”ืžืกืš ืฉืœื”ื. ืงื•ื“ ืฆื“ ืฉืจืช ืงื•ื“ ืฆื“ ื”ืฉืจืช ืžื•ืจื›ื‘ ืžืฉื ื™ ื ืชื™ื‘ื™ื - ืื—ื“ ืžื˜ืคืœ ื‘ืขื™ื“ื›ื•ืŸ ื•ื”ืฉื ื™ ืžื˜ืคืœ ื‘ืจื™ืฉื•ื. ื›ืœ ื’ื•ืœืฉ ืฉื ื›ื ืก ืœืืชืจ ืคื•ืชื— ื—ื™ื‘ื•ืจ ืœื ืชื™ื‘ ื”ืจื™ืฉื•ื, ื•ื›ืœ ืคืขื ืฉืœื•ื—ืฆื™ื ืขืœ ื”ื›ืคืชื•ืจ ื”ื’ื•ืœืฉื™ื ืฉื•ืœื—ื™ื ื”ื•ื“ืขืช POST ืœื ืชื™ื‘ ื”ืขื™ื“ื›ื•ืŸ. ืื ื™ ืžืชื—ื™ืœ ื‘ื”ื’ื“ืจืช ืžืขืจืš ืฉืœ ื›ืœ ื”ื’ื•ืœืฉื™ื ืฉื›ืจื’ืข ืžื—ื•ื‘ืจื™ื:
const clients: Array<SSEStreamingApi> = [];
ื”ืžืžืฉืง SSEStreamingApi ืžื’ื™ืข ืž Hono ื•ืžืืคืฉืจ ืœืฉืœื•ื— ืื™ืจื•ืขื™ ืฆื“ ืฉืจืช ืœืœืงื•ื—ื•ืช ืฉืžืžืชื™ื ื™ื ืœื”ื. ื ืชื™ื‘ ื”ืจื™ืฉื•ื ื ืจืื” ื›ืš:
app.get('/count', (c) => {
  return streamSSE(c, async (stream) => {
    stream.writeln("data: Start\n\n");
    clients.push(stream);
    const id = clients.length - 1;

    stream.onAbort(() => {
      clients.splice(id, 1);
      console.log(\removed client ${id}\);
    });
    
    while(true) {
      await stream.sleep(1000);
    }
  })
})
ืœืงื•ื—ื•ืช ืฉืžืชื—ื‘ืจื™ื ืœืืชืจ ื™ื™ื›ื ืกื• ืœื ืชื™ื‘ ื–ื” ื›ื“ื™ ืœื”ื™ืจืฉื ืœืงื‘ืœืช ื”ื•ื“ืขื•ืช. ื”ืคื•ื ืงืฆื™ื” streamSSE ืžื’ื™ืขื” ืž hono. ื”ื™ื ืžืงื‘ืœืช ืืช ืื•ื‘ื™ืงื˜ ื”ื—ื™ื‘ื•ืจ ืฉืœ hono ืขืฆืžื• ื•ืคื•ื ืงืฆื™ื™ืช Callback. ื›ืœ ืคืขื ืฉืœืงื•ื— ืžืชื—ื‘ืจ ืžื•ืคืขืœืช ืคื•ื ืงืฆื™ื™ืช ื” Callback ืขื ื”ืคืจืžื˜ืจ stream ืฉืžื™ื™ืฆื’ ืืช ื–ืจื ื”ืชืงืฉื•ืจืช ืœืื•ืชื• ื’ื•ืœืฉ. ื‘ืงื•ื“ ื”ื“ื•ื’ืžื” ืื ื™ ืžื“ื‘ื™ืง ืืช ื”ืื•ื‘ื™ืงื˜ ื”ื–ื” ืœืžืขืจืš ื•ื’ื ืจื•ืฉื ืขืœื™ื• ืคื•ื ืงืฆื™ื™ืช ื‘ื™ื˜ื•ืœ ื›ืš ืฉื›ืฉื”ื–ืจื ื™ื™ืกื’ืจ ืื•ื˜ื•ืžื˜ื™ืช ื”ื•ื ื™ื•ืกืจ ืžื”ืžืขืจืš. ื”ืคื•ื ืงืฆื™ื” ืžืกืชื™ื™ืžืช ื‘ืœื•ืœืื” ืื™ื ืกื•ืคื™ืช ืฉืžื˜ืจืชื” ืœืฉืžื•ืจ ืืช ื”ื—ื™ื‘ื•ืจ ื‘ื—ื™ื™ื. ืืช ื”ื›ืชื™ื‘ื” ืื ื™ ืžื‘ืฆืข ืžืงื•ื“ ื”ื˜ื™ืคื•ืœ ื‘ื ืชื™ื‘ ื”ืขื™ื“ื›ื•ืŸ:
app.post('/count', async (c) => {
  console.log(\POST /count\);
  const { value } = await c.req.json();
  console.log(\Got ${value}\);

  clients.forEach(c => {
    c.writeSSE({ data: value });
  })
  
  return c.json({ message: 'Value received' });
})
ืงื•ื“ ื–ื” ื ืงืจื ื›ืœ ืคืขื ืฉื ืฉืœื—ืช ื‘ืงืฉืช POST ืœื ืชื™ื‘ ื”ืขื™ื“ื›ื•ืŸ. ื”ืงื•ื“ ืจืฅ ืขืœ ื›ืœ ื”ืœืงื•ื—ื•ืช ื‘ืžืขืจืš ื•ื›ื•ืชื‘ ืœื›ืœ ืื—ื“ ืžื”ื ืืช ื”ืขืจืš ืฉื ืฉืœื—. ื”ืขืœื™ืชื™ ืืช ื”ืงื•ื“ ื”ืžืœื ืฉืœ main.ts ืขื ื›ืœ ื” import-ื™ื ืœื’ื™ื˜ื”ืื‘ ืžื•ื–ืžื ื™ื ืœืžืฆื•ื ืื•ืชื• ื‘ื“ืฃ ื”ืคืจื•ื™ืงื˜: https://github.com/ynonp/hono-sync-counter-demo ืงื•ื“ ืฆื“ ืœืงื•ื— ื‘ืฆื“ ื”ืœืงื•ื— ืื ื™ ืจื•ืฆื” ืœื”ืชื—ื‘ืจ ืœื ืชื™ื‘ ื”ืจื™ืฉื•ื ื‘ืขืœื™ื™ื”, ื•ืื—ืจื™ ื–ื” ืœืฉืœื•ื— ื”ื•ื“ืขื•ืช POST ืœื ืชื™ื‘ ื”ืขื“ื›ื•ืŸ ื›ืœ ืคืขื ืฉืœื•ื—ืฆื™ื ืขืœ ื”ื›ืคืชื•ืจ. ื–ื” ืงื•ื‘ืฅ ื” JavaScript ืฉืื ื™ ืฉื•ืœื— ืœืœืงื•ื—:
// client/sync.js

const evtSource = new EventSource("/count");
const ti = document.querySelector('input');

evtSource.onmessage = (event) => {
  ti.value = event.data;
};

document.querySelector('button').addEventListener('click', async () => {
  await fetch('/count', {
    method: "POST",
    body: JSON.stringify({ value: ti.value }),
    contentType: 'application/json',
  });
});
ื”ืขื‘ื•ื“ื” ืขื SSE ื‘ื“ืคื“ืคืŸ ืžืื•ื“ ื ื•ื—ื” ื•ืื ื™ ืžืขื“ื™ืฃ ืื•ืชื• ืขืœ ืคื ื™ Web Sockets ืขื‘ื•ืจ ืขื™ื“ื›ื•ื ื™ื ืืกื™ื ื›ืจื•ื ื™ื™ื ืžืฆื“ ืฉืจืช.