To-Do-ListREADME.md6 matches
19โ โ โโโ queries.ts # Database operations
20โ โโโ routes/
21โ โ โโโ todos.ts # Todo API routes
22โ โโโ index.ts # Main server entry point
23โโโ frontend/
34```
3536## API Endpoints
3738- `GET /api/todos` - Get all todos
39- `POST /api/todos` - Create a new todo
40- `PUT /api/todos/:id` - Update a todo
41- `DELETE /api/todos/:id` - Delete a todo
4243## Usage
untitled-5312README.md7 matches
17โ โ โโโ queries.ts # Database query functions
18โ โโโ routes/
19โ โ โโโ jobs.ts # Job posting API routes
20โ โ โโโ chat.ts # Chat API routes
21โ โโโ index.ts # Main Hono server
22โโโ frontend/
32```
3334## API Endpoints
3536### Jobs
37- `GET /api/jobs` - Get all job postings
38- `POST /api/jobs` - Create a new job posting
3940### Chat
41- `GET /api/chat/messages` - Get chat messages
42- `POST /api/chat/messages` - Send a chat message
4344## Getting Started
16await runMigrations();
1718// API routes
19app.route("/api/jobs", jobsRouter);
20app.route("/api/chat", chatRouter);
2122// Serve static files
EmmtettChatRoom.tsx5 matches
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React, { useState, useEffect, useRef } from "https://esm.sh/react@18.2.0";
3import type { ChatMessage, CreateMessageRequest, ApiResponse } from "../../shared/types.ts";
45interface ChatRoomProps {
41intervalRef.current = window.setInterval(async () => {
42try {
43const response = await fetch('/api/chat/messages');
44const result: ApiResponse<ChatMessage[]> = await response.json();
45if (result.success && result.data) {
46setMessages(result.data);
71setLoading(true);
72try {
73const response = await fetch('/api/chat/messages', {
74method: 'POST',
75headers: {
79});
8081const result: ApiResponse<ChatMessage> = await response.json();
82
83if (result.success && result.data) {
EmmtettJobForm.tsx3 matches
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React, { useState } from "https://esm.sh/react@18.2.0";
3import type { Job, CreateJobRequest, ApiResponse } from "../../shared/types.ts";
45interface JobFormProps {
54setLoading(true);
55try {
56const response = await fetch('/api/jobs', {
57method: 'POST',
58headers: {
62});
6364const result: ApiResponse<Job> = await response.json();
65
66if (result.success && result.data) {
EmmtettJobBoard.tsx3 matches
2import React, { useState } from "https://esm.sh/react@18.2.0";
3import JobForm from "./JobForm.tsx";
4import type { Job, ApiResponse } from "../../shared/types.ts";
56interface JobBoardProps {
25setLoading(true);
26try {
27const response = await fetch(`/api/jobs/${jobId}`, {
28method: 'DELETE',
29});
3031const result: ApiResponse<{ deleted: boolean }> = await response.json();
32
33if (result.success) {
untitled-5977index.ts2 matches
14await runMigrations();
1516// API routes
17app.route("/api/artists", artistsRoutes);
1819// Static file serving and main page
1import { Hono } from "https://esm.sh/hono@3.11.7";
2import { getRecentMessages, createMessage } from "../database/queries.ts";
3import type { CreateMessageRequest, ApiResponse } from "../../shared/types.ts";
45const chat = new Hono();
9try {
10const messages = await getRecentMessages(50);
11const response: ApiResponse<typeof messages> = {
12success: true,
13data: messages
15return c.json(response);
16} catch (error) {
17const response: ApiResponse<never> = {
18success: false,
19error: "Failed to fetch messages"
30// Basic validation
31if (!messageData.username || !messageData.message) {
32const response: ApiResponse<never> = {
33success: false,
34error: "Username and message are required"
4243if (messageData.username.length > 50) {
44const response: ApiResponse<never> = {
45success: false,
46error: "Username must be 50 characters or less"
5051if (messageData.message.length > 500) {
52const response: ApiResponse<never> = {
53success: false,
54error: "Message must be 500 characters or less"
5859if (messageData.message.length === 0) {
60const response: ApiResponse<never> = {
61success: false,
62error: "Message cannot be empty"
6667const newMessage = await createMessage(messageData);
68const response: ApiResponse<typeof newMessage> = {
69success: true,
70data: newMessage
72return c.json(response, 201);
73} catch (error) {
74const response: ApiResponse<never> = {
75success: false,
76error: "Failed to send message"
untitled-5977index.tsx2 matches
126try {
127const url = state.editingArtist
128? `/api/artists/${state.editingArtist.id}`
129: '/api/artists';
130
131const method = state.editingArtist ? 'PUT' : 'POST';
1import { Hono } from "https://esm.sh/hono@3.11.7";
2import { getAllJobs, createJob, deleteJob } from "../database/queries.ts";
3import type { CreateJobRequest, ApiResponse } from "../../shared/types.ts";
45const jobs = new Hono();
9try {
10const jobList = await getAllJobs();
11const response: ApiResponse<typeof jobList> = {
12success: true,
13data: jobList
15return c.json(response);
16} catch (error) {
17const response: ApiResponse<never> = {
18success: false,
19error: "Failed to fetch jobs"
31if (!jobData.title || !jobData.company || !jobData.description ||
32!jobData.location || !jobData.salary || !jobData.contact_email) {
33const response: ApiResponse<never> = {
34success: false,
35error: "All fields are required"
3940const newJob = await createJob(jobData);
41const response: ApiResponse<typeof newJob> = {
42success: true,
43data: newJob
45return c.json(response, 201);
46} catch (error) {
47const response: ApiResponse<never> = {
48success: false,
49error: "Failed to create job"
58const id = parseInt(c.req.param("id"));
59if (isNaN(id)) {
60const response: ApiResponse<never> = {
61success: false,
62error: "Invalid job ID"
67const deleted = await deleteJob(id);
68if (!deleted) {
69const response: ApiResponse<never> = {
70success: false,
71error: "Job not found"
74}
7576const response: ApiResponse<{ deleted: boolean }> = {
77success: true,
78data: { deleted: true }
80return c.json(response);
81} catch (error) {
82const response: ApiResponse<never> = {
83success: false,
84error: "Failed to delete job"