uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

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

Ko'proq ko'rsatish
1 418
Obunachilar
-224 soatlar
-37 kunlar
-630 kunlar
Postlar arxiv
ToCode
1 418
force_path_style: true, # Enable 'force_path_style' => true, if bucket name is non DNS compliant
  )
  bucket_name = "test-bucket"
  wrapper = BucketCreateWrapper.new(Aws::S3::Bucket.new(bucket_name))
  return unless wrapper.create?(region)

  puts "Created bucket #{wrapper.bucket.name}."
  puts "Your bucket's region is: #{wrapper.location}"
end

run_demo if $PROGRAM_NAME == __FILE__
ืกืงืจื™ืคื˜ ืฉื ื™ ื›ื•ืชื‘ ืงื•ื‘ืฅ ืœืื•ืชื• bucket:
require 'aws-sdk-s3'

region = "us-east-2"

Aws.config.update(
  endpoint:  'http://s3.localhost.localstack.cloud:4566', # update with localstack endpoint
  region: region,
  force_path_style: true, # Enable 'force_path_style' => true, if bucket name is non DNS compliant
)

s3_client = Aws::S3::Client.new

bucket_name = 'test-bucket'
object_key = 'demo.txt'
file_content = "This is a demo file uploaded via Ruby to my LocalStack S3.\n"

begin
  response = s3_client.put_object(
    bucket: bucket_name,
    key: object_key,
    body: file_content
  )
  puts "File '#{object_key}' uploaded successfully to '#{bucket_name}'!"
rescue Aws::S3::Errors::ServiceError => e
  puts "Error uploading file: #{e.message}"
end
ื•ืกืงืจื™ืคื˜ ืฉืœื™ืฉื™ ืขื“ื™ื™ืŸ ื‘ืจื•ื‘ื™ ืงื•ืจื ืืช ื”ืงื•ื‘ืฅ ื•ืžื“ืคื™ืก ืืช ืชื•ื›ื ื•:
require 'aws-sdk-s3'

Aws.config.update(
  endpoint:  'http://s3.localhost.localstack.cloud:4566', # update with localstack endpoint
  region: 'us-east-2',
  force_path_style: true # Enable 'force_path_style' => true, if bucket name is non DNS complian
)


s3_client = Aws::S3::Client.new

bucket_name = 'test-bucket'
object_key  = 'demo.txt'

begin
  response = s3_client.get_object(bucket: bucket_name, key: object_key)

  file_contents = response.body.read

  puts "Contents of '#{object_key}' in bucket '#{bucket_name}':\n\n"
  puts file_contents
rescue Aws::S3::Errors::NoSuchKey => e
  puts "File '#{object_key}' not found: #{e.message}"
rescue Aws::S3::Errors::ServiceError => e
  puts "Error retrieving file: #{e.message}"
end
ืœืกื™ื•ื ืืคืฉืจ ืœืžื—ื•ืง ืืช ื”ื‘ืืงื˜ ืขื ื”ืกืงืจื™ืคื˜ ืคื™ื™ืชื•ืŸ ืฉื”ืชืงื ื• ืงื•ื“ื ื‘ื”ืคืขืœืช:
$ awslocal s3 rb s3://test-bucket --force
ืกืš ื”ื›ืœ ื”ืคื™ืชื•ื— ืขื local stack ืžืืคืฉืจ ืขื‘ื•ื“ื” ื‘ืื•ืชื• ืžืžืฉืง ื›ืžื• AWS ืื‘ืœ ืžืงื•ืžื™ืช ืœื’ืžืจื™. ื‘ืจื•ืจ ืฉื‘ืกื™ื•ื ื”ืคื™ืชื•ื— ืฆืจื™ืš ืœื‘ื“ื•ืง ื”ื›ืœ ืขืœ AWS ื•ื‘ื˜ื— ื™ื”ื™ื• ื‘ืขื™ื•ืช ื•ืขื•ื“ ืฆืจื™ืš ืœื“ื‘ืจ ืขืœ ื”ืจืฉืื•ืช ื•ื”ื›ืœ ื ื›ื•ืŸ. ืื‘ืœ ืœืžื™ ืฉืจื•ืฆื” ืœื”ืชื—ื™ืœ ืคื™ืชื•ื— ืฉื™ื’ื™ืข ืœ AWS ืื‘ืœ ื‘ื™ื ืชื™ื™ื ืจืง ืœืจืื•ืช ืฉื“ื‘ืจื™ื ืขื•ื‘ื“ื™ื ืืฆืœื ื• ืขืœ ื”ืžื—ืฉื‘ ืœื•ืงืืœ ืกื˜ืืง ื™ื›ื•ืœ ืœืชืช ืคื™ืชืจื•ืŸ ืžืฆื•ื™ืŸ ื•ืžื”ื™ืจ.

ToCode
1 418
ืฆืขื“ื™ื ืจืืฉื•ื ื™ื ืขื localstack ืœื•ืงืืœ ืกื˜ืืง https://github.com/localstack/localstack ื”ื•ื ืคืจื•ื™ืงื˜ ืฉืžื˜ืจืชื• ื”ืคืขืœืช ื’ื™ืจืกื” ืžืงื•ืžื™ืช ืฉืœ AWS ืืฆืœื›ื ืขืœ ื”ืžื—ืฉื‘ ื‘ืชื•ืš ืงื•ื ื˜ื™ื™ื ืจ. ื”ื ืžื›ืกื™ื ืขืฉืจื•ืช ืกืจื‘ื™ืกื™ื ืฉืœ AWS ื‘ื—ืฉื‘ื•ืŸ ื”ื—ื™ื ืžื™, ื•ื™ืฉ ื’ื ื—ืฉื‘ื•ืŸ ื‘ืชืฉืœื•ื ืฉื›ื•ืœืœ ื™ื•ืชืจ ื™ื›ื•ืœื•ืช ืœื—ืœืง ืžื”ืกืจื‘ื™ืกื™ื ื•ื™ื•ืชืจ ืกืจื‘ื™ืกื™ื. ืžื” ืฉืื”ื‘ืชื™ ื‘ืžื™ื•ื—ื“ ื‘ืขื‘ื•ื“ื” ืขื local stack ื–ื” ืฉื”ืงื•ื“ ืœื ืฆืจื™ืš ืœื”ืฉืชื ื•ืช - ื”ืžืžืฉืง ืฉืœื”ื ื–ื”ื” ืœืžืžืฉืง ืฉืœ AWS ืžืœื‘ื“ ืคืงื•ื“ืช ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ืื—ืช ืฉืžื’ื“ื™ืจื” ืืช ื” endpoint ืฉืœื”ื ื‘ืžืงื•ื ืฉืœ AWS. ื‘ื•ืื• ื ืจืื” ืื™ืš ืœื”ืชืงื™ืŸ ื•ืœืขื‘ื•ื“ ืขื ืกืจื‘ื™ืก S3 ืฉืœ ืœื•ืงืืœ ืกื˜ืืง ื“ืจืš ืฉืœื•ืฉื” ืกืงืจื™ืคื˜ื™ื. ื”ืชืงื ืช ื”ื›ืœื™ื ืืช ืœื•ืงืืœ ืกื˜ืืง ืืคืฉืจ ืœื”ืชืงื™ืŸ ืžื“ืฃ ื”ื”ืชืงื ื” ืฉืœื”ื ื›ืืŸ: https://docs.localstack.cloud/getting-started/installation/ ืื—ืจื™ ื”ื”ืชืงื ื” ื”ื™ื™ืชื™ ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืืช ื”ืชื™ืงื™ื” ืฉืœื”ื ืœืชื™ืงื™ื•ืช ื”ืงื‘ืฆื™ื ืฉืœ Docker Desktop ืžืชื•ืš ื”ื”ื’ื“ืจื•ืช ืฉืœ ื“ื•ืงืจ, ื•ื’ื ืœื”ืชืงื™ืŸ ืกืงืจื™ืคื˜ ืฉืขื•ื˜ืฃ ืืช aws ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื”:
pip install awscli-local
ื”ืคืขืœืชื™ ืืช local stack ืขื:
$ localstack start -d
ื•ืื—ืจื™ ื–ื” ื”ืจืฆืชื™ ืืช ืคืงื•ื“ืช ื”ืกื˜ื˜ื•ืก ื›ื“ื™ ืœืจืื•ืช ืืช ื”ืกืจื‘ื™ืกื™ื ืฉืงื™ื‘ืœืชื™:
$ localstack status services
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Service                  โ”ƒ Status      โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ acm                      โ”‚ โœ” available โ”‚
โ”‚ apigateway               โ”‚ โœ” available โ”‚
โ”‚ cloudformation           โ”‚ โœ” available โ”‚
โ”‚ cloudwatch               โ”‚ โœ” available โ”‚
โ”‚ config                   โ”‚ โœ” available โ”‚
โ”‚ dynamodb                 โ”‚ โœ” available โ”‚
โ”‚ dynamodbstreams          โ”‚ โœ” available โ”‚
โ”‚ ec2                      โ”‚ โœ” available โ”‚
โ”‚ es                       โ”‚ โœ” available โ”‚
โ”‚ events                   โ”‚ โœ” available โ”‚
โ”‚ firehose                 โ”‚ โœ” available โ”‚
โ”‚ iam                      โ”‚ โœ” available โ”‚
โ”‚ kinesis                  โ”‚ โœ” available โ”‚
โ”‚ kms                      โ”‚ โœ” available โ”‚
โ”‚ lambda                   โ”‚ โœ” available โ”‚
โ”‚ logs                     โ”‚ โœ” available โ”‚
โ”‚ opensearch               โ”‚ โœ” available โ”‚
โ”‚ redshift                 โ”‚ โœ” available โ”‚
โ”‚ resource-groups          โ”‚ โœ” available โ”‚
โ”‚ resourcegroupstaggingapi โ”‚ โœ” available โ”‚
โ”‚ route53                  โ”‚ โœ” available โ”‚
โ”‚ route53resolver          โ”‚ โœ” available โ”‚
โ”‚ s3                       โ”‚ โœ” running   โ”‚
โ”‚ s3control                โ”‚ โœ” available โ”‚
โ”‚ scheduler                โ”‚ โœ” available โ”‚
โ”‚ secretsmanager           โ”‚ โœ” available โ”‚
โ”‚ ses                      โ”‚ โœ” available โ”‚
โ”‚ sns                      โ”‚ โœ” available โ”‚
โ”‚ sqs                      โ”‚ โœ” available โ”‚
โ”‚ ssm                      โ”‚ โœ” available โ”‚
โ”‚ stepfunctions            โ”‚ โœ” available โ”‚
โ”‚ sts                      โ”‚ โœ” available โ”‚
โ”‚ support                  โ”‚ โœ” available โ”‚
โ”‚ swf                      โ”‚ โœ” available โ”‚
โ”‚ transcribe               โ”‚ โœ” available โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
ืขื‘ื•ื“ื” ืขื S3 ื ืžืฉื™ืš ืœื›ืžื” ืกืงืจื™ืคื˜ื™ื ื‘ Ruby ืฉืขื•ื‘ื“ื™ื ืขื S3 ื‘ืฉื‘ื™ืœ ื”ื“ื•ื’ืžื”. ื‘ื›ื•ืœื ื”ืฉื•ืจื” ื”ื›ื™ ื—ืฉื•ื‘ื” ื”ื™ื:
Aws.config.update(
  endpoint:  'http://s3.localhost.localstack.cloud:4566'
  region: 'us-east-2',
  force_path_style: true
)
ื”ืกืงืจื™ืคื˜ ื”ืจืืฉื•ืŸ ื™ื•ืฆืจ bucket ื—ื“ืฉ ืขืœ s3 ืฉืจืฅ ืขืœ local stack:
require "aws-sdk-s3"

class BucketCreateWrapper
  attr_reader :bucket

  def initialize(bucket)
    @bucket = bucket
  end

  def create?(region)
    @bucket.create(create_bucket_configuration: { location_constraint: region })
    true
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't create bucket. Here's why: #{e.message}"
    false
  end

  def location
    if @bucket.nil?
      "None. You must create a bucket before you can get its location!"
    else
      @bucket.client.get_bucket_location(bucket: @bucket.name).location_constraint
    end
  rescue Aws::Errors::ServiceError => e
    "Couldn't get the location of #{@bucket.name}. Here's why: #{e.message}"
  end
end

def run_demo
  region = "us-east-2"
  Aws.config.update(
    endpoint:  'http://s3.localhost.localstack.cloud:4566', # update with localstack endpoint
    region: region,

ToCode
1 418
ืงืฆืช ืงืฉื” ืœื”ืชืžืฆื ื‘ืืชืจ ืฉืœื”ื, ืื‘ืœ ื‘ืชื—ืชื™ืช ื”ืขืžื•ื“ ื™ืฉ ืžืกืคืจ ืœื™ื ืงื™ื ืฉื™ืžื•ืฉื™ื™ื ื•ื‘ืžื™ื•ื—ื“ ืฉื•ื•ื” ืœื—ื˜ื˜ ื‘ื“ืฃ Trending Vals. ืชื•ื›ืœื• ืœืžืฆื•ื ืฉื ืื™ื ืกื•ืฃ ืกืงืจื™ืคื˜ื™ื ืฉืื ืฉื™ื ืื—ืจื™ื ื›ืชื‘ื• ื•ืชื•ื›ืœื• ืœืฉืœื‘ ืื•ืชื ื‘ืขื‘ื•ื“ื” ืฉืœื›ื. ื‘ืฆื“ ื™ืžื™ืŸ ืœืžืขืœื” ื™ืฉ ืื™ื™ืงื•ืŸ ืฉืœ ื–ื›ื•ื›ื™ืช ืžื’ื“ืœืช ืฉื™ืคืชื— ืชื™ื‘ืช ื—ื™ืคื•ืฉ ืื ืืชื ืจื•ืฆื™ื ืœื—ืคืฉ ืกืงืจื™ืคื˜ื™ื ืœืคื™ ื˜ืงืกื˜. ื‘ื ื•ืกืฃ ื”ืกืงืจื™ืคื˜ื™ื ืžืงื‘ืœื™ื ื’ื™ืฉื” ืœืžืกืคืจ ืžืฉืื‘ื™ื ืขืœ val.town ืฉื™ืขื–ืจื• ืœื›ื ืœื›ืชื•ื‘ ื“ื‘ืจื™ื ืฉื™ืžื•ืฉื™ื™ื: ื”ื ื™ื•ื“ืขื™ื ืœืฉืœื•ื— ืื™ืžื™ื™ืœ, ืœืฉืžื•ืจ ืžื™ื“ืข ื‘ื‘ืกื™ืก ื ืชื•ื ื™ื, ืœืฉืžื•ืจ ืงื‘ืฆื™ื ืžืงื•ืžื™ืช ื•ื›ืžื• ืฉื›ื‘ืจ ืกื™ืคืจืชื™ ืœืชืงืฉืจ ืขื ChatGPT. ื•ื›ืื™ืœื• ืฉื–ื” ืœื ืžืกืคื™ืง ื™ืฉ ืœื”ื ืกื•ื›ืŸ AI ืฉื›ื•ืชื‘ ืืช ื”ืกืงืจื™ืคื˜ื™ื ื•ืžืจื™ืฅ ืื•ืชื ื›ืš ืฉืœื›ื ื ืฉืืจ ืจืง ืœื”ื‘ื™ื ืืช ื”ืจืขื™ื•ืŸ. ื .ื‘. ื”ืขืœื™ืชื™ ืœื˜ืœื’ืจื ืืช ื”ื‘ื•ื˜ ืชืจื’ื•ื ืฉืชื™ืืจืชื™ ื›ืืŸ. ืงื•ืจืื™ื @SpeakEnglishToMe_bot ื•ืืชื ืžื•ื–ืžื ื™ื ืœืฉืœื•ื— ืืœื™ื• ืžื™ืœื™ื ื”ื•ื ื™ืขื ื” ื‘ืชืจื’ื•ื. ืื• ืžื” ืฉื™ื•ืชืจ ืžืขื ื™ื™ืŸ, ืงื—ื• ืืช ื”ืชื‘ื ื™ืช ืžื›ืืŸ, ืชืขืฉื• fork ื‘ val town ื•ืชืขืœื• ื‘ื•ื˜ื™ื ืžืฉืœื›ื.

ToCode
1 418
ื•ืืœ ื˜ืื•ืŸ ื”ื•ื ื”ืคืจื•ื™ืงื˜ ื”ื›ื™ ืžื“ืœื™ืง ืฉืืชื ืœื ืžื›ื™ืจื™ื ืืชืžื•ืœ ืคืจืกืžืชื™ ืคื” ืกืงืจื™ืคื˜ ืฉื›ืชื‘ืชื™ ืฉืžื—ืคืฉ ืžื™ื“ืข ืขืœ ืคื•ื“ืงืกื˜ื™ื ื‘ val.town. ื›ืŸ ื”ื›ืจืชื™ ืืช val.town ื‘ืขื™ืงืจ ื‘ื–ื›ื•ืช ื”ืกืœื•ื’ืŸ ืขื ื”ื—ืจื•ื– ืฉืœื”ื ื•ืงืฆืช ื–ื›ืจืชื™ ืฉื–ื” ืืชืจ ืฉื™ืชื•ืฃ ืงื•ื“ ื›ืžื• ืงื•ื“ืคืŸ ืจืง ืœืฆื“ ืฉืจืช, ืื‘ืœ ื”ืžืฉื—ืงื™ื ืื™ืชื• ื‘ื™ืžื™ื ื”ืื—ืจื•ื ื™ื ื”ืฉืื™ืจื• ืื•ืชื™ ื‘ืคื” ืคืขื•ืจ. ื•ืืœ ื˜ืื•ืŸ ื”ื•ื ื”ืคืจื•ื™ืงื˜ ื”ื›ื™ ืžื“ืœื™ืง ืฉืืชื ืœื ืžื›ื™ืจื™ื, ื•ืื ืกื” ืœื”ืกื‘ื™ืจ ืœืžื”: ืกืงืจื™ืคื˜ื™ื ืคืฉื•ื˜ื™ื ื‘ val town ื•ืืœ ื˜ืื•ืŸ ืžืืคืฉืจ ืœื›ื ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ื™ื ื›ื•ืœืœ ืžืื•ื“ ืงืฆืจื™ื (ืกืงืจื™ืคื˜ ืฉืœ ืคื•ื ืงืฆื™ื” ื‘ื•ื“ื“ืช ื”ื•ืœืš ื˜ื•ื‘). ืืช ื”ืกืงืจื™ืคื˜ื™ื ื”ืืœื” ืืคืฉืจ ืœื”ืจื™ืฅ ื™ื“ื ื™ืช ืื• ืžืชื•ืš ืกืงืจื™ืคื˜ื™ื ืื—ืจื™ื, ืžื” ืฉื ื•ืชืŸ ืœื ื• ืžื’ืจืฉ ืžืฉื—ืงื™ื ืœื‘ื ื™ื™ืช ืžื’ื“ืœื™ื ืžืœื’ื•. ื”ื ื” ืกืงืจื™ืคื˜ ืคืฉื•ื˜ ืฉื›ืชื‘ืชื™ ืฉืžืชืจื’ื ื˜ืงืกื˜ ื“ืจืš ChatGPT ืžื›ืœ ืฉืคื” ืœืื ื’ืœื™ืช:
import { OpenAI } from "https://esm.town/v/std/openai";

export default async function translateToEnglishWithOpenAI(text: string) {
  const openai = new OpenAI();
  const completion = await openai.chat.completions.create({
    messages: [
      {
        role: "user",
        content:
          \Translate "ืฉืœื•ื" to English. If the word the was already in English respond with its definition. Respond just with the translation or definition.\,
      },
      { role: "assistant", content: \hello\ },
      {
        role: "user",
        content:
          \Translate "peace" to English. If the word the was already in English respond with its definition. Respond just with the translation or definition.\,
      },
      {
        role: "assistant",
        content:
          \Peace is a stress-free state of security and calmness that comes when thereโ€™s no fighting or war, everything coexisting in perfect harmony and freedom.\,
      },
      {
        role: "user",
        content:
          \Translate "${text}" to English. If the word the was already in English respond with its definition. Respond just with the translation or definition.\,
      },
    ],
    model: "gpt-4",
  });
  return completion.choices[0].message.content || "Translation Error";
}
ื•ืื ืชืชื—ื‘ืจื• ืœื•ืืœ ื˜ืื•ืŸ (ื–ื” ื‘ื—ื™ื ื) ืชื•ื›ืœื• ืœืฉื ื•ืช ืืช ื”ืงื•ื“ ื•ืœื”ืจื™ืฅ ืืช ื”ืกืงืจื™ืคื˜ ืžืชื•ืš ื“ืฃ ื”ืกืงืจื™ืคื˜ ื‘ื›ืชื•ื‘ืช: https://www.val.town/v/ynonp/translateToEnglishWithOpenAI ืœื ืฆืจื™ืš ืžืคืชื— API ืœ Chat GPT ื›ื™ ื•ืืœ ื˜ืื•ืŸ ื ื•ืชื ื™ื ืœื›ื ื‘ืžืชื ื”. ื‘ื ื™ื™ืช ืกืงืจื™ืคื˜ื™ื ื’ื“ื•ืœื™ื ื™ื•ืชืจ ืขืœ ื‘ืกื™ืก ื”ืคืฉื•ื˜ื™ื ืืคืฉืจ ืœืฉืœื‘ ื›ืœ ืกืงืจื™ืคื˜ ืฉืื ื—ื ื• ื‘ื•ื ื™ื ื‘ val.town ื‘ืกืงืจื™ืคื˜ื™ื ืื—ืจื™ื. ืœื“ื•ื’ืžื” ื”ืกืงืจื™ืคื˜ ื”ื–ื”:
import translateToEnglish from "https://esm.town/v/ynonp/translateToEnglishWithOpenAI";

console.log(await translateToEnglish("ืžื” ื”ืžืฆื‘"));
ืื• ื™ื•ืชืจ ืžืขื ื™ื™ืŸ, ื”ืกืงืจื™ืคื˜ ื”ื–ื” ืฉืžื™ื™ืฆื’ ื‘ื•ื˜ ืœื˜ืœื’ืจื:
import { OpenAI } from "https://esm.town/v/std/openai";
import { telegramSendMessage } from "https://esm.town/v/vtdocs/telegramSendMessage?v=5";
import translateToEnglishWithOpenAI from "https://esm.town/v/ynonp/translateToEnglishWithOpenAI";

export const telegramWebhookEchoMessage = async (req: Request) => {
  // Verify this webhook came from our bot
  if (
    req.headers.get("x-telegram-bot-api-secret-token")
      !== Deno.env.get("TELEGRAM_WEBHOOK_SECRET")
  ) {
    return new Response("Not Allowed", { status: 401 });
  }
  // Echo back the user's message
  const body = await req.json();
  const text: string = body.message.text;
  const chatId: number = body.message.chat.id;

  const translated = await translateToEnglishWithOpenAI(text);
  if (translated) {
    await telegramSendMessage(
      Deno.env.get("TELEGRAM_BOT_TOKEN"),
      { chat_id: chatId, text: translated },
    );
  } else {
    await telegramSendMessage(
      Deno.env.get("TELEGRAM_BOT_TOKEN"),
      { chat_id: chatId, text: "Translation error" },
    );
  }
  return Response.json("ok");
};
ืืช ื”ืกืงืจื™ืคื˜ื™ื ืฉืืชื ื›ื•ืชื‘ื™ื ืฉื ืืคืฉืจ ืœื”ืจื™ืฅ ื‘ืชื’ื•ื‘ื” ืœืื™ืžื™ื™ืœ ืฉื ืฉืœื—, ื‘ืฆื•ืจื” ืžื—ื–ื•ืจื™ืช (cron job) ืื• ื‘ืชื’ื•ื‘ื” ืœื‘ืงืฉืช HTTP (ื›ืžื• ื”ื‘ื•ื˜ ืœื˜ืœื’ืจื ืคื”). ืžื” ืขื•ื“

ToCode
1 418
ื”ื™ื•ื ืœืžื“ืชื™: ื—ื™ืคื•ืฉ ืคื•ื“ืงืกื˜ื™ื ื‘ podcast index ืœ val town ื™ืฉ ืืช ืื—ื“ ื” AI-ื™ื ื”ื›ื™ ื—ืžื•ื“ื™ื ืฉืคื’ืฉืชื™ - ืœื ืจืง ืฉื”ื•ื ื›ื•ืชื‘ ืืช ื”ืงื•ื“ ื‘ืฉื‘ื™ืœื™, ืืคืฉืจ ื’ื ืœื”ืจื™ืฅ ื•ืœืขืฉื•ืช Deploy ื‘ืœื—ื™ืฆืช ื›ืคืชื•ืจ, ื•ื›ืœ ื–ื” ื‘ื—ื™ื ื. ื•ื›ืŸ ืื ื™ ื™ื•ื“ืข ืฉื’ื ืจืคืœื™ื˜ ืžืกืคืงื™ื ืฉื™ืจื•ืช ื“ื•ืžื” ื•ืืคื™ืœื• ืขื ืชืžื™ื›ื” ื‘ื”ืจื‘ื” ื™ื•ืชืจ ืฉืคื•ืช, ืื‘ืœ ืจืคืœื™ื˜ ืœืื—ืจื•ื ื” ืžืจื’ื™ืฉ ืžืกื•ืจื‘ืœ ืžื“ื™. ื‘ื—ื–ืจื” ืœ val town ื‘ืฉื‘ื™ืœ ืœืฉื—ืง ืขื ื”ื‘ื•ื˜ ื‘ื™ืงืฉืชื™ ืฉื™ื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ืœื—ื™ืคื•ืฉ ืคื•ื“ืงืกื˜ื™ื ื‘ podcast index. ืœืžืจื‘ื” ื”ื”ืคืชืขื” ื”ืชื•ืฆืื” ืขื‘ื“ื” ื‘ื ื™ืกื™ื•ืŸ ื”ืจืืฉื•ืŸ, ื›ื•ืœืœ ื”ื˜ืจื™ืง ืžื” API ืฉืœื”ื ืขื ื” sha1 ืœืžืคืชื—. ื–ื” ื”ืงื•ื“:
import crypto from "https://esm.sh/crypto-js";

export default async function searchPodcasts(query: string) {
  const apiKey = Deno.env.get("PODCAST_INDEX_API_KEY");
  const apiSecret = Deno.env.get("PODCAST_INDEX_API_SECRET");

  // Generate authentication headers as per Podcast Index API requirements
  const currentTime = Math.floor(Date.now() / 1000);
  const hashString = apiKey + apiSecret + currentTime;
  const hash = crypto.SHA1(hashString).toString();

  const headers = {
    "X-Auth-Key": apiKey,
    "X-Auth-Date": currentTime.toString(),
    "Authorization": hash,
    "User-Agent": "ValTownPodcastSearch/1.0",
  };

  try {
    const response = await fetch(\https://api.podcastindex.org/api/1.0/search/byterm?q=${encodeURIComponent(query)}\, {
      method: "GET",
      headers: headers,
    });

    if (!response.ok) {
      throw new Error(\HTTP error! status: ${response.status}\);
    }

    const data = await response.json();

    return data.feeds.map(podcast => ({
      title: podcast.title,
      description: podcast.description,
      url: podcast.url,
      artwork: podcast.artwork,
    }));
  } catch (error) {
    console.error("Podcast search error:", error);
    return [];
  }
}

console.log(await searchPodcasts("syntax"));
ื•ืื ื™ืฉ ืœื›ื 5 ื“ืงื•ืช ืชื•ื›ืœื• ื’ื ืœื™ืฆื•ืจ ื—ืฉื‘ื•ืŸ ื‘ val town ื•ืœื”ืจื™ืฅ ืื•ืชื• ื™ืฉืจ ืžื”ืžืžืฉืง ืฉืœื”ื ื‘ืงื™ืฉื•ืจ: https://www.val.town/v/ynonp/righteousLimeGalliform ืจืง ืฉื™ืžื• ืœื‘ ืฉืฆืจื™ืš ืงื•ื“ื ืœื™ืฆื•ืจ ืืช ืฉื ื™ ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” PODCAST_INDEX_API_KEY ื• PODCAST_INDEX_API_SECRET ื“ืจืš ื”ืžืžืฉืง ืฉืœ val town ืœื—ืฉื‘ื•ืŸ ืฉืœื›ื ื‘ืงื™ืฉื•ืจ: https://www.val.town/settings/environment-variables ื•ื‘ืฉื‘ื™ืœ ืœืงื‘ืœ ืืช ื”ืžืคืชื—ื•ืช ื™ืฉ ืœื™ืฆื•ืจ ื—ืฉื‘ื•ืŸ ื‘ podcast index api: https://api.podcastindex.org/ ื .ื‘. ื”ืžืžืฉืง ืฉืœ podcast index ื“ื™ ืžื“ืœื™ืง ืืคืฉืจ ืœืžืฆื•ื ืืช ื›ืœ ื”ืžื™ื“ืข ืขืœ ืคื•ื“ืงืกื˜, ืจืฉื™ืžื•ืช ื”ืคืจืงื™ื ื•ื’ื ืœื™ื ืงื™ื ืœืงื‘ืฆื™ ื”ืงื•ืœ ืฉืœ ื›ืœ ืคืจืง.

ToCode
1 418
ื—ื™ื“ืช Vue - ืื™ืš ืขื•ื‘ื“ Scoped Style ื ื›ืชื•ื‘ ืืช ื”ืงื•ื“ ื”ื‘ื ื‘ืงื•ืžืคื•ื ื ื˜ืช App.vue:
<script setup>
import Child from './Child.vue';
</script>

<template>
  <p class="red">Hello World from App</p>
  <Child />
</template>

<style scoped>
.red {
  color: red;
}
</style>
ื•ื–ื” Child.vue:
<script setup></script>

<template>
  <button class="red">
    Hello World from Child
  </button>
</template>
ืืคืฉืจ ืœืจืื•ืช ืืช ื”ื“ื•ื’ืžื” ืœื™ื™ื‘ ื‘ืงื™ืฉื•ืจ ื”ื–ื”: https://tinyurl.com/4nff62kp ืขื›ืฉื™ื• ืœืฉืืœื•ืช - ืœืžื” ื”ื˜ืงืกื˜ ื‘ื›ืคืชื•ืจ ืžื•ืคื™ืข ื‘ืื“ื•ื? ื•ืื™ืš ืืคืฉืจ "ืœื ืชืง" ืื•ืชื• ืžื”ืขื™ืฆื•ื‘ ืฉืœ App ื›ื“ื™ ืฉืœื ื™ืงื‘ืœ ืืช ื”ื’ื“ืจืช ื”ืื“ื•ื ืžืฉื? ืฉื™ืžื• ืœื‘ ืฉื”ื’ื“ืจื•ืช ื”ืขื™ืฆื•ื‘ ื”ืŸ ื‘ื‘ืœื•ืง styled scoped ื•ืฉื–ื• ืœื ื”ื‘ืขื™ื” ืฉืžืชื•ืืจืช ื›ืืŸ: https://www.tocode.co.il/blog/2021-10-watch-out-inherited-css, ืœืžืจื•ืช ืฉื’ื ื”ื‘ืขื™ื” ื‘ืคื•ืกื˜ ื”ื”ื•ื ืžืขื ื™ื™ื ืช.

ToCode
1 418
ื•ืื ื‘ื›ืœ ื–ืืช ืื ื™ ืจื•ืฆื” ืœื”ืขื‘ื™ืจ ืžืฉืชื ื” ืจื™ืืงื˜ื™ื‘ื™ ื‘ Vue ืœื™ืœื“ื™ื? ื”ืงื•ื“ ื”ื‘ื ื‘ Vue ืœื ืขื•ื‘ื“, ืื• ืœืคื—ื•ืช ืœื ืขื•ืฉื” ืืช ืžื” ืฉื”ืชื›ื•ื•ื ืชื™. ืงื•ืžืคื•ื ื ื˜ื” ืขืœื™ื•ื ื”:
<script setup>
import { ref } from 'vue'
import Child from './Child.vue';
const x = ref(10)
</script>

<template>
  <Child :x="x" />
</template>
ื•ืงื•ืžืคื•ื ื ื˜ืช Child:
<script setup lang="ts">
const {x} = defineProps<{x: any}>();

function inc() {
  x.value++;
}
</script>

<template>
  <p>x = {{x}}</p>
  <button @click="inc">+1</button>
</template>
ื ืจืื” ื›ืื™ืœื• Child ืžืงื‘ืœ ืื•ื‘ื™ืงื˜ ืจื™ืืงื˜ื™ื‘ื™ x ื•ืžืขืœื” ืืช ืขืจื›ื• ื‘-1. ื‘ืคื•ืขืœ ื”ืขื‘ืจืช ื”ืคืจืžื˜ืจ ื“ืจืš props ืžืขื‘ื™ืจื” ืืช ื” value ืฉืœ ื”ืื•ื‘ื™ืงื˜ ื”ืจื™ืืงื˜ื™ื‘ื™, ื›ืœื•ืžืจ ื‘ืชื•ืš Child ื”ืžืฉืชื ื” x ื”ื•ื ืžืกืคืจ. ืœืžืกืคืจ ืื™ืŸ ืฉื“ื” .value ื•ืœื›ืŸ ื”ืงื•ื“ ื ื›ืฉืœ. ืžื” ื‘ื›ืœ ื–ืืช ืืคืฉืจ ืœืขืฉื•ืช? ืœ Vue ื™ืฉ ืฉื ื™ ืคื™ืชืจื•ื ื•ืช ื˜ื•ื‘ื™ื ืœืžืฆื‘ ื”ื–ื”: ื”ืจืืฉื•ืŸ ื”ื•ื ืฉ Child ื™ื“ื•ื•ื— ืขืœ ืื™ืจื•ืข ื• Parent ื™ื˜ืคืœ ื‘ืื™ืจื•ืข ื•ื™ืฉื ื” ืืช x, ื•ื”ืฉื ื™ ื–ื” ืžืงืจื• ื‘ืฉื defineModel ืฉื‘ื’ื“ื•ืœ ืžื˜ืคืœ ื‘ื“ื™ื ืžื™ืงื” ื”ื–ืืช ื‘ืฉื‘ื™ืœื ื• ืื‘ืœ ืžื‘ื—ื™ื ืช ื”ืงื•ื“ ื ืจืื” ืœื’ืžืจื™ ื›ืžื• ื”ืขื‘ืจืช ืžืฉืชื ื” ืจื™ืืงื˜ื™ื‘ื™ ืœืงื•ืžืคื•ื ื ื˜ื”. ืฉื ื™ื”ื ืคื™ืชืจื•ื ื•ืช ื˜ื•ื‘ื™ื. ื”ืคื™ืชืจื•ืŸ ืฉ Vue ืœื ืจืฆื• ืฉื ื™ื™ืฉื ื”ื•ื ืœืขื˜ื•ืฃ ืืช ื”ืžืฉืชื ื” ื”ืจื™ืืงื˜ื™ื‘ื™ ื‘ืื•ื‘ื™ืงื˜. ืžื•ื–ืจ ืื‘ืœ ืขื•ื‘ื“:
<script setup>
import { ref } from 'vue'
import Child from './Child.vue';
const x = ref({value: 10})
</script>

<template>
  <Child :x="x" />
</template>
<script setup lang="ts">
const {x} = defineProps<{x: any}>();

function inc() {
  x.value++;
}
</script>

<template>
  <p>x = {{x.value}}</p>
  <button @click="inc">+1</button>
</template>
ื‘ืจื•ืจ ืœืžื” ื–ื” ืขื•ื‘ื“ - ref ื”ื•ื ืจืงื•ืจืกื™ื‘ื™ ื•ืœื›ืŸ ื’ื value ืฉืœื• ื™ื”ื™ื” ืžืฉืชื ื” ืจื™ืืงื˜ื™ื‘ื™, ืื‘ืœ ื›ืฉืžืขื‘ื™ืจื™ื ืื•ื‘ื™ืงื˜ ื“ืจืš props ื•ื™ื• ืœื ืžื‘ื˜ืœ ืืช ื”ืจื™ืืงื˜ื™ื‘ื™ื•ืช ืฉืœ ื”ืฉื“ื•ืช ื”ืคื ื™ืžื™ื™ื ื‘ืฆื•ืจื” ืจืงื•ืจืกื™ื‘ื™ืช ื•ืœื›ืŸ Child ื™ื›ื•ืœ ืœืฉื ื•ืช ืืช ื”ืžื™ื“ืข. ืžื” ืฉืœื“ืขืชื™ ืžืขื ื™ื™ืŸ ื‘ื“ื•ื’ืžื” ื”ื–ืืช ื”ื•ื ื›ืžื” ืงืœ "ืœืคืชื•ืจ" ืืช ื”ื‘ืขื™ื” ื‘ืฆื•ืจื” ืœื ื ื›ื•ื ื” ืื•ืœื™ ืืคื™ืœื• ื‘ืœื™ ืœืฉื™ื ืœื‘ ืฉื–ื” ืคื™ืชืจื•ืŸ ืœื ื ื›ื•ืŸ. ืฉืชื™ ื”ื“ืจื›ื™ื ื”"ื ื›ื•ื ื•ืช" ืœืคื™ืชืจื•ืŸ ื“ื•ืจืฉื•ืช ื”ื™ื›ืจื•ืช ืขื ืžื ื’ื ื•ื ื™ื ื ื•ืกืคื™ื ืฉืœ vue, ื•ื“ื•ื•ืงื ื”ืคื™ืชืจื•ืŸ ื”ืขืงื•ื ื”ื•ื ื‘ืขืฆื ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ, ืžื”ื‘ื—ื™ื ื” ืฉื”ื•ื ืœื ื“ื•ืจืฉ ืขื•ื“ ืžื ื’ื ื•ื ื™ื. ื”ืœืงื— ืฉืœื™ ืžื”ื“ื•ื’ืžื” ื”ื–ืืช ื”ื•ื ืฉืจืง ื‘ื’ืœืœ ืฉืคื™ืชืจื•ืŸ ืžืกื•ื™ื ื”ื•ื ื”ื™ื—ื™ื“ ืฉืื ื™ ืจื•ืื” ื–ื” ืขื“ื™ื™ืŸ ืœื ืื•ืžืจ ืฉื–ื” ื”ืคื™ืชืจื•ืŸ ื”ื ื›ื•ืŸ. ื‘ืฉื‘ื™ืœ ืœื”ื’ื™ืข ืœืคื™ืชืจื•ืŸ ื”ื ื›ื•ืŸ ืฆืจื™ืš ืœืคืขืžื™ื ืœื”ืžืฉื™ืš ืœืงืจื•ื ื‘ืชื™ืขื•ื“, ืœื”ืชืœื‘ื˜ ื‘ื™ืŸ ื›ืžื” ืืคืฉืจื•ื™ื•ืช ื•ืœื”ื‘ื™ืŸ ืืช ื”ื™ืชืจื•ื ื•ืช ื•ื”ื—ืกืจื•ื ื•ืช ืฉืœ ื›ืœ ืืคืฉืจื•ืช.

ToCode
1 418
ืžืื—ืจ ื• vercel ืชื•ืžืš ื‘ nuxt ืื™ืŸ ืœื ื• ื‘ืขื™ื” ืœืขืฉื•ืช deploy ื‘ืœื—ื™ืฆื” ืื—ืช ื•ืœืงื‘ืœ ืืช ื›ืœ ื”ืคื™ื ื•ืงื™ื ืฉืœ vercel. ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื”ื•ื ืขื“ื™ื™ืŸ neon ื•ื’ื ื”ื•ื ืฉืžื•ืจ ื‘ืขื ืŸ.

ToCode
1 418
ืชื‘ื ื™ืช ืคืจื•ื™ืงื˜: nuxt, drizzle, auth0 ืืชืžื•ืœ ืคื™ืจืกืžืชื™ ืคื” ืชื‘ื ื™ืช ืœืคืจื•ื™ืงื˜ React ืฉืžืฉืชืžืฉ ื‘ Next.js ื•ืžื›ื™ืœ ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืฉืจืช, ืžืฉื™ื›ืช ืžื™ื“ืข ืžื‘ืกื™ืก ื ืชื•ื ื™ื ื•ื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื ืขื auth0. ื”ื™ื•ื ื ืจืื” ืืช ื”ื—ืœืง ื”ืฉื ื™ ืฉืœ ื”ืคื•ืกื˜ ื•ื ื‘ื ื” ืืช ืื•ืชื” ืชื‘ื ื™ืช ืขื‘ื•ืจ nuxt ืœื™ื™ืฉื•ืžื™ vue. ื”ืงื•ื“ ื›ืืŸ: https://github.com/ynonp/nuxt-drizzle-auth0-demo ื‘ื•ืื• ื ืจืื” ืžื” ื™ืฉ ื‘ืจื™ืคื•. ื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื ื ื™ื”ื•ืœ ื”ืžืฉืชืžืฉื™ื ื‘ืžืขืจื›ืช ืžืชื—ื‘ืจ ืœ auth0 ื›ื“ื™ ืฉืื ื—ื ื• ืœื ื ืฆื˜ืจืš ืœื”ืชืืžืฅ, ื‘ื“ื™ื•ืง ื›ืžื• ื‘ื“ื•ื’ืžืช ื” next. ื–ื” ืื•ืžืจ ืฉื‘ืฆื“ ืฉืœื ื• ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื˜ืคืœ ื‘ืื™ืจื•ืข ืฉืœ ืžืฉืชืžืฉ ืฉื”ืชื—ื‘ืจ ืื• ื”ืชื ืชืง, ื•ื ื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื•ืช ืฉืœ auth0 ื›ื“ื™ ืœื”ื‘ื™ืŸ ืื ื™ืฉ ืžืฉืชืžืฉ ืžื—ื•ื‘ืจ. ื”ืงื•ื“ ืžืชื—ื™ืœ ื‘ืงื•ื‘ืฅ server/routes/auth/auth0.get.ts:
export default defineOAuthAuth0EventHandler({
  async onSuccess(event, { user, tokens }) {
    await setUserSession(event, {
      user: {
        id: user.sub
      }
    })

    return sendRedirect(event, '/hello')
  },
  // Optional, will return a json error and 401 status code by default
  onError(event, error) {
    console.log(\error in login\);
    return sendRedirect(event, '/')
  },
})
ื–ื” ื”ืงื•ื“ ืฉืžื˜ืคืœ ื‘ืื™ืจื•ืขื™ื ืฉืžื’ื™ืขื™ื ืž auth0 ื›ืฉืžืฉืชืžืฉ ืžืชื—ื‘ืจ ืœืžืขืจื›ืช. ื‘ืฆื“ ืฉืœ nuxt ืื ื™ ืœื•ืงื— ืืช user.sub ืฉื–ื” ืžื–ื”ื” ื”ืžืฉืชืžืฉ ื•ืฉื•ืชืœ ืื•ืชื• ื‘ session ื›ื“ื™ ืฉื ื•ื›ืœ ืœื’ืฉืช ืืœื™ื• ืžื”ืงื•ืžืคื•ื ื ื˜ื•ืช ื•ืžื ืชื™ื‘ื™ ืฆื“ ืฉืจืช. ื”ืงื•ืžืคื•ื ื ื˜ื” ื”ื‘ืื” ื‘ืงื•ื‘ืฅ pages/hello.vue ื›ื‘ืจ ื›ื•ืœืœืช ืงื•ื“ ืฉืžืืคืฉืจ ื—ื™ื‘ื•ืจ ืœืžืขืจื›ืช:
<script setup>
import People from '../components/People.vue';

const { loggedIn, user, session, fetch, clear } = useUserSession()
</script>

<template>
  <div v-if="loggedIn">
    <h1>Welcome {{ user.id }}!</h1>
    <p>Logged in since {{ session.loggedInAt }}</p>
    <button @click="clear">Logout</button>
    <People />
  </div>
  <div v-else>
    <h1>Not logged in</h1>
    <a href="/auth/auth0">Login with Auth0</a>
  </div>
</template>
ื‘ืฉื‘ื™ืœ ืœื”ืชื—ื‘ืจ ืœืžืขืจื›ืช ืฆืจื™ืš ืจืง ืœืขื‘ื•ืจ ืœื ืชื™ื‘ /auth/auth0 ื•ื‘ืฉื‘ื™ืœ ืœื”ืชื ืชืง ืฆืจื™ืš ืœื”ืคืขื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื” clear ืฉืžื ืงื” ืืช ื” Session. ื›ืœ ื”ืงื•ื“ ื”ื–ื” ืžืฉืชืžืฉ ื‘ืžื•ื“ื•ืœ auth-utils ืฉืœ nuxt. ื‘ืฉื‘ื™ืœ ื”ื—ื™ื‘ื•ืจ ืœ Auth0 ื™ืฉ ืœื”ื’ื“ื™ืจ ืืช ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ืฉืœื”ื ื‘ืงื•ื‘ืฅ ื” .env. ืืœื” ื”ืžืคืชื—ื•ืช ืฉืขืœื™ื›ื ืœื”ื’ื“ื™ืจ ื‘ืงื•ื‘ืฅ ื›ื“ื™ ืฉื”ืคืจื•ื™ืงื˜ ื™ืขื‘ื•ื“:
NUXT_SESSION_PASSWORD=
NUXT_OAUTH_AUTH0_CLIENT_ID=
NUXT_OAUTH_AUTH0_CLIENT_SECRET=
NUXT_OAUTH_AUTH0_DOMAIN=
DATABASE_URL=
ื—ื™ื‘ื•ืจ ืœื‘ืกื™ืก ื ืชื•ื ื™ื ื”ื—ื™ื‘ื•ืจ ืœื“ืจื™ื–ืœ ืžืฉืชืžืฉ ื‘ื“ื™ื•ืง ื‘ืื•ืชื• ืงื•ื“ ืฉื”ืจืื™ืชื™ ืืชืžื•ืœ ืœื’ื‘ื™ next. ื‘ืฆื“ ืฉืœ nuxt ื”ืขื‘ืจืช ื”ืžื™ื“ืข ืžื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืœืคืจื•ื ื˜ ืื ื“ ืงืฆืช ืฉื•ื ื”: 1. ื™ืฉ ืœื”ื’ื“ื™ืจ ื ืชื™ื‘ ืฆื“ ืฉืจืช ืฉื™ืžืฉื•ืš ืืช ื”ื ืชื•ื ื™ื ืžื‘ืกื™ืก ื”ื ืชื•ื ื™ื. 2. ื™ืฉ ืœื”ืคืขื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื” useAsyncData ืฉืœ nuxt ืžืชื•ืš ื”ืงื•ืžืคื•ื ื ื˜ื” ื•ืžืžื ื” ืœืžืฉื•ืš ืืช ื”ืžื™ื“ืข ืžื”ื ืชื™ื‘ ืฉื™ืฆืจื ื•. ื‘ืฉื‘ื™ืœ ื”ืกืขื™ืฃ ื”ืจืืฉื•ืŸ ืื ื™ ื™ื•ืฆืจ ืงื•ื‘ืฅ server/routes/api/people.get.ts ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
import { usersTable } from '@/db/schema';
import { db } from "@/db/drizzle";

export default eventHandler(async (event) => {
  try {
    const res = await requireUserSession(event)
    const users = await db.select().from(usersTable);
    return users;
  } catch (err) {
    return [];
  }
})
ืื ื”ืžืฉืชืžืฉ ืžื—ื•ื‘ืจ ื”ื•ื ื™ืงื‘ืœ ืืช ืจืฉื™ืžืช ื”ืžืฉืชืžืฉื™ื ืžื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื•ื‘ืฉื‘ื™ืœ ื”ืžืฉื—ืง ืื ื”ืžืฉืชืžืฉ ืœื ืžื—ื•ื‘ืจ ื ื—ื–ื™ืจ ืœื• ืจืฉื™ืžื” ืจื™ืงื”. ื”ืงื•ืžืคื•ื ื ื˜ื” ืฉืžืฉืชืžืฉืช ื‘ื ืชื™ื‘ ื–ื” ืฉืžื•ืจื” ื‘ืงื•ื‘ืฅ components/People.vue ื•ื–ื” ื”ืงื•ื“ ืฉืœื”:
<script setup lang="ts">
const { data, status, error, refresh } = await useAsyncData(
  'people',
  () => $fetch('/api/people', {
     credentials: 'include',
     headers: useRequestHeaders(['cookie']),
  })
)
</script>

<template>
  <h1>People. Status = {{ status }}</h1>
  <ul>
    <li v-for="person in data">{{ person.email }}</li>
  </ul>
</template>

<style lang="css" scoped>
</style>
ื”ืฉื™ืžื•ืฉ ื‘ fetch ืžืชื•ืš useAsyncData ื ืจืื” ื›ืžื• ื‘ืงืฉืช ืจืฉืช ืื‘ืœ ืœืžืขืฉื” ื–ื• ื‘ืงืฉื” ืžืงื•ืžื™ืช ื›ื™ ื”ืงื•ื“ ืจืฅ ื‘ืฆื“ ื”ืฉืจืช ื‘ SSR. ื›ืฉื”ืงื•ื“ ื™ื™ืฉืœื— ืœื“ืคื“ืคืŸ ื”ื•ื ื™ื›ืœื•ืœ ื›ื‘ืจ ืืช ื”ืชืฉื•ื‘ื” (ื›ืœื•ืžืจ ืืช ืจืฉื™ืžืช ื”ืžืฉืชืžืฉื™ื). ื ืฉื™ื ืœื‘ ืฉืื ื™ ื—ื™ื™ื‘ ืœื”ืขื‘ื™ืจ ืืช ื” cookie ืžื”ื“ืคื“ืคืŸ ื‘ืฉื‘ื™ืœ ืœืฉืžื•ืจ ืขืœ ื” Session. ืฉืืจ ื”ืงื•ื“ ื“ื™ ืคืฉื•ื˜ ื”ื•ื ืœื•ืงื— ืืช ืจืฉื™ืžืช ื”ืžืฉืชืžืฉื™ื ืžื”ื ืชื™ื‘ ืฉื”ื’ื“ืจื ื• ื•ืžืฆื™ื’ ืืช ื›ืชื•ื‘ื•ืช ื”ืžื™ื™ืœ ืฉืœื”ื ืขืœ ื”ืžืกืš.

ToCode
1 418
ืžื” ืขื•ืฉื™ื ืขื ื”ืงื•ื“ ืฉืœื ืžื‘ื™ื ื™ื? ื“ื™ืœืžื” ืืžื™ืชื™ืช. ื•ื”ื™ื ืชืžื™ื“ ื”ื™ืชื”. ืื—ื“ ื”ืžืงื•ืžื•ืช ื”ืžืคื—ื™ื“ื™ื ื‘ื™ื•ืชืจ ืžืชื›ื ืชื™ื ื ืงืจื Tutorial Hell. ืœื”ื™ื•ืช ื‘ Tutorial Hell ืื•ืžืจ ืฉืืชื” ืชืงื•ืข ืœืจืื•ืช ืžื“ืจื™ื›ื™ื ืฉืžืกื‘ื™ืจื™ื ืื™ืš ืœื›ืชื•ื‘ ื“ื‘ืจื™ื ืื‘ืœ ืœื ืžืฉื ื” ื›ืžื” ืžื“ืจื™ื›ื™ื ืชืจืื” ืœื ืชืฆืœื™ื— ืœื›ืชื•ื‘ ืงื•ื“ ื—ื“ืฉ ื‘ืขืฆืžืš. ื”ื™ื•ื ื›ืฉ ChatGPT ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืœืš ืžื“ืจื™ืš ืฉืคื•ืชืจ ื‘ืื•ืคืŸ ืžื™ื™ื“ื™ ื›ืœ ื‘ืขื™ื” ื‘ืงื•ื“ ื” Tutorial Hell ืœื ื ืจืื” ื›ืœ ื›ืš ืจืข, ืžื” ืฉืื•ืžืจ ืฉืื ื—ื ื• ื ืฉืืจื™ื ื‘ื• ื”ืจื‘ื” ื™ื•ืชืจ ื–ืžืŸ. ื”ื’ื•ืจื ืœ Tutorial Hell ื”ื•ื ื”ืžืขื’ืœ ื”ื–ื“ื•ื ื™ ืฉืœ ื”ืฆืœื—ื” ืžื“ื•ืžื™ื™ื ืช. ืื ื™ ื™ื›ื•ืœ ืœื’ืจื•ื ืœืžืขืจื›ืช ืœืขืฉื•ืช ืžื” ืฉืื ื™ ืจื•ืฆื” ื‘ืืžืฆืขื•ืช ื‘ื™ืฆื•ืข ื”ื•ืจืื•ืช ืฉืงืจืืชื™ ื‘ืžื“ืจื™ืš ื‘ืื™ื ื˜ืจื ื˜, ืืคื™ืœื• ืื ืื ื™ ืœื ืžื‘ื™ืŸ ืืช ื”ื”ื•ืจืื•ืช ืขืฆืžืŸ. ืžืกืคื™ืง ืœืœื›ืช ืฆืขื“ ืฆืขื“ ืขื ื”ืžื“ืจื™ืš (ืื• ื‘ืขื•ืœื ืฉืœ ื”ื™ื•ื ืœืชืช ืœ AI ืœืฉื›ืชื‘ ื—ืœืงื™ื ืžื”ืžื“ืจื™ืš ืชื•ืš ื›ื“ื™ ืชื ื•ืขื” ืื ื“ื‘ืจื™ื ืœื ืขื•ื‘ื“ื™ื) ื•ื™ืฉ ืœื™ ืžืขืจื›ืช. ื•ื‘ื›ืœ ื–ืืช ืžืขื ื™ื™ืŸ ืœืฉืื•ืœ, ืžื” ืขื•ืฉื™ื ืขื ื›ืœ ื”ืงื•ื“ ื”ื–ื” ืฉืื ื—ื ื• ืงื•ืจืื™ื, ืžืขืชื™ืงื™ื ื•ืœื ืžื‘ื™ื ื™ื? ื‘ื•ืื• ื ื—ืœืง ืืช ื”ืชืฉื•ื‘ื” ืœืคื™ ืกื•ื’ ื”ืคืจื•ื™ืงื˜. ื‘ืคืจื•ื™ืงื˜ ืœื™ืžื•ื“ื™ ื”ืžื˜ืจื” ืฉืœื ื• ืžืจืืฉ ื”ื™ืชื” ืœืœืžื•ื“ ืื™ืš ื“ื‘ืจื™ื ืขื•ื‘ื“ื™ื, ื•ืœื›ืŸ ื ืฉืžืข ื”ื’ื™ื•ื ื™ ืœื”ืฉืชืžืฉ ื›ืžื” ืฉืคื—ื•ืช ื‘ Tutorials. ืงื•ื“ ืฉืื ื™ ืœื ืžื‘ื™ืŸ ื”ื•ื ื—ืกืจ ืขืจืš ื‘ืงื•ื ื˜ืงืกื˜ ื”ื–ื”, ื›ื™ ืžืžื™ืœื ืื ื™ ื‘ื•ื ื” ืืช ื”ืžืขืจื›ืช ืจืง ื‘ืฉื‘ื™ืœ ืœืœืžื•ื“ ืื™ืš ื“ื‘ืจื™ื ืขื•ื‘ื“ื™ื. ื›ื™ื•ื•ืŸ ื˜ื•ื‘ ืœืคืจื•ื™ืงื˜ ืœื™ืžื•ื“ื™ ื™ื”ื™ื” ืœื›ืŸ ืœืงืจื•ื ื˜ื•ื˜ื•ืจื™ืืœืก ืื• ืชืฉื•ื‘ื•ืช ืฉืœ Chat GPT ืจืง ื‘ืžื™ื“ื” ื•ื–ื” ื ื•ืชืŸ ื›ื™ื•ื•ืŸ ืœืžืืžืจื™ื ื™ื•ืชืจ ืžืขืžื™ืงื™ื ืขืœ ืื•ืชื• ื ื•ืฉื, ืื—ืจื™ ื–ื” ืœืœื›ืช ืœืงืจื•ื ืืช ื”ืชื™ืขื•ื“ ื•ื”ืžื™ื“ืข ื”ื™ื•ืชืจ ืžืขืžื™ืง, ื•ื‘ืกื•ืฃ ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“ ื‘ืขืฆืžืš ื‘ืœื™ ืœื”ืกืชื›ืœ ื‘ื˜ื•ื˜ื•ืจื™ืืœ ื•ื‘ืœื™ ืœื”ืขืชื™ืง ืงื•ื“. ืื ื“ื‘ืจื™ื ืœื ืขื•ื‘ื“ื™ื ืืคืฉืจ ืœื—ื–ื•ืจ ืœืงืจื•ื ื‘ืžื“ืจื™ืš ืื‘ืœ ื”ืžื˜ืจื” ื‘ืกื•ืฃ ืชื”ื™ื” ืœื”ื™ื•ืช ืžืกื•ื’ืœื™ื ืœื›ืชื•ื‘ ืืช ื”ื›ืœ ืžื”ืจืืฉ ื•ื›ืžื•ื‘ืŸ ืœื”ืกื‘ื™ืจ ืœืขืฆื›ื ืžื” ื”ืžืฉืžืขื•ืช ื•ืžื” ืขื•ืฉื” ื›ืœ ืฉื•ืจื”. ื‘ืคืจื•ื™ืงื˜ ืคืจื•ื“ืงืฉืŸ ื”ืชืฉื•ื‘ื” ื ืจืื™ืช ื™ื•ืชืจ ืžื•ืจื›ื‘ืช, ื›ื™ ืœื›ืื•ืจื” ืฉื™ืžื•ืฉ ื‘ Tutorial ื—ื•ืกืš ื–ืžืŸ ืœื™ืžื•ื“ ื•ืžืืคืฉืจ ืœืกื™ื™ื ืžืฉื™ืžื•ืช ืžื”ืจ ื™ื•ืชืจ. ืื ื™ ืžื›ื™ืจ ืืคื™ืœื• ื—ื‘ืจื•ืช ืฉืžืชื’ืžืœื•ืช ืžืคืชื—ื™ื ืœืคื™ ื›ืžื” ืžืฉื™ืžื•ืช ื”ื ืžืกื™ื™ืžื™ื ื‘ื—ื•ื“ืฉ ื•ืœื›ืŸ ืžืชื›ื ืชื™ื ืฉืจื•ืฆื™ื ื‘ื•ื ื•ืก ืจืง ื™ืจื•ื•ื™ื—ื• ืžื”ืขืชืงืช ืงื•ื“ ืฉื”ื ืœื ืžื‘ื™ื ื™ื ืœืคืจื•ื™ืงื˜ ืคืจื•ื“ืงืฉืŸ. ืื‘ืœ ื’ื ืคื” ื›ืฉืขื•ืฆืจื™ื ืœื—ืฉื•ื‘ ืขืœ ื–ื” ืื ื—ื ื• ืžื‘ื™ื ื™ื ืฉื™ืฉ ืœื ื• ืขื‘ื•ื“ื” ื—ืฉื•ื‘ื” ื™ื•ืชืจ ืžื”ืขืชืงืช ืงื•ื“. ื‘ืคืจื•ื™ืงื˜ ืคืจื•ื“ืงืฉืŸ ื™ืฉ ืฉื ื™ ืืชื’ืจื™ื ืฉืขื“ื™ื™ืŸ ื“ื•ืจืฉื™ื ื”ืชืขืจื‘ื•ืช ืื ื•ืฉื™ืช: 1. ืจื’ื™ืฉื•ืช ืœื˜ืขื•ื™ื•ืช ืื• ืœืคื’ื™ืขื” ื‘ื ืชื•ื ื™ ืคืจื•ื“ืงืฉืŸ. 2. ื”ืชืืžื” ืœืฉื™ื˜ื•ืช ื”ืขื‘ื•ื“ื” ื”ืงื™ื™ืžื•ืช ื‘ืคืจื•ื™ืงื˜, ื”ื™ืžื ืขื•ืช ืžื›ืคืœ ืงื•ื“ ื•ื™ืฆื™ืจืช ืื‘ืกื˜ืจืงืฆื™ื•ืช ื—ื“ืฉื•ืช ื›ื“ื™ ืฉื”ืงื™ื“ื•ื“ ื‘ื”ืžืฉืš ื™ื”ื™ื” ืžื”ื™ืจ ื™ื•ืชืจ. ืœื›ืŸ ื’ื ื‘ืคืจื•ื™ืงื˜ ืคืจื•ื“ืงืฉืŸ ื”ืขืชืงืช ืงื•ื“ ื‘ืœื™ ืœื”ื‘ื™ืŸ ืž Tutorial ืื• ืž Chat GPT ืคื•ื’ืขืช ื‘ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช ืœื˜ื•ื•ื— ืืจื•ืš. ื”ืคืจื•ื™ืงื˜ ื”ื™ื—ื™ื“ ืฉืื ื™ ืžืจื’ื™ืฉ ื‘ื ื•ื— ืœื”ืขืชื™ืง ืืœื™ื• ืงื•ื“ ืฉืื ื™ ืœื ืžื‘ื™ืŸ ื”ื•ื ืคืจื•ื™ืงื˜ ื”ื•ื›ื—ืช ื™ื›ื•ืœืช (Proof of Concept), ื›ืฉืื ื™ ืจื•ืฆื” ืœื‘ื ื•ืช ืžืฉื”ื• ืžื”ืจ ื›ื“ื™ ืœื”ืจืื•ืช ืœืœืงื•ื— ืื• ืœื—ื‘ืจ, ืื• ืœื”ื‘ื™ืŸ ืœืขืฆืžื™ ืžื” ื”ื™ื›ื•ืœื•ืช ืฉืœ ืกืคืจื™ื” ืžืกื•ื™ืžืช. ื‘ืžืฆื‘ ื›ื–ื” ืื ื™ ืขื•ื‘ื“ ืขื ืกืคืจื™ื•ืช ื•ื›ืœื™ื ืฉืื ื™ ืœื ื”ื›ื™ ืžื›ื™ืจ ื•ืจืง ืจื•ืฆื” ืœืจืื•ืช ืื ื”ื ื™ื›ื•ืœื™ื ืœืคืชื•ืจ ืœื™ ืืช ื”ื‘ืขื™ื” ื•ืื ื›ื“ืื™ ืœื™ ื‘ื›ืœืœ ืœืœืžื•ื“ ืื•ืชื, ื•ืœื›ืŸ ืื ื™ ืžืจื’ื™ืฉ ื™ื•ืชืจ ื ื•ื— ืœื”ืขืชื™ืง ืงื•ื“ ืฉื‘ืื•ืชื• ืจื’ืข ืื ื™ ืœื ืžื‘ื™ืŸ, ืžืชื•ืš ื”ื‘ื ื” ืฉืื ื”ื›ืœื™ื ื”ืืœื” ื™ืขืžื“ื• ื‘ืžื‘ื—ืŸ ืืฆื˜ืจืš ืžืžื™ืœื ืœืœืžื•ื“ ืื•ืชื ืœืขื•ืžืง ื•ืื– ื›ื‘ืจ ืื–ืจื•ืง ืืช ืงื•ื“ ื” POC ื›ื“ื™ ืœื‘ื ื•ืช ืืช ื”ืžื ื’ื ื•ืŸ ืžื—ื“ืฉ ื‘ืžืขืจื›ืช ื”ืืžื™ืชื™ืช ืฉืœื™. ื .ื‘. ื”ืคื•ืกื˜ ื”ื–ื” ืžื“ื‘ืจ ืกืคืฆื™ืคื™ืช ืขืœ ืงื•ื“ ืฉืื ื™ ืžืขืชื™ืง ื‘ืœื™ ืœื”ื‘ื™ืŸ. ื”ืจื‘ื” ืคืขืžื™ื ืื ื™ ืืฉืชืžืฉ ื‘ Chat GPT ื›ื“ื™ ืœื›ืชื•ื‘ ืงื•ื“ ืฉื”ื™ื™ืชื™ ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืœื‘ื“ ื•ืฉืื ื™ ืžื‘ื™ืŸ ื‘ื“ื™ื•ืง ืื™ืš ื”ื•ื ืืžื•ืจ ืœื”ื™ืจืื•ืช, ืœื“ื•ื’ืžื” ื›ืฉืื ื™ ืžื‘ืงืฉ ืž Chat GPT ืœื›ืชื•ื‘ ืืช ืจืฉื™ืžืช ื›ืœ ื”ื™ืžื™ื ื‘ืฉื‘ื•ืข ื‘ืชื•ืจ ืžืขืจืš ื‘ JavaScript ื‘ืจื•ืจ ืฉื”ื™ื™ืชื™ ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืืช ื–ื” ืœื‘ื“ ืื‘ืœ ื”ื•ื ื—ืกืš ืœื™ ื”ืงืœื“ื”. ื›ืœื™ ื” AI ื”ื ื›ืœื™ื ืžื“ื”ื™ืžื™ื ื•ืื ื™ ืฉืžื— ืœื”ืฉืชืžืฉ ื‘ื”ื ื›ืžื” ืฉื™ื•ืชืจ, ื›ืœ ืขื•ื“ ื–ื” ื‘ืืžืช ืชื•ืจื ืœืื™ื›ื•ืช ื”ืงื•ื“ ื•ืžื”ื™ืจื•ืช ื”ืคื™ืชื•ื—.

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