Skip to content

Commit

Permalink
add users page
Browse files Browse the repository at this point in the history
  • Loading branch information
susumutomita committed May 14, 2024
1 parent d3a62e8 commit d9f76bd
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 34 deletions.
20 changes: 20 additions & 0 deletions __test__/users.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { GET } from '../src/app/api/health/route';

describe('Health Check API', () => {
it('should return a 200 status with a message', async () => {
process.env.TEST_ERROR = 'false';
const response = await GET();
expect(response.status).toBe(200);
expect(await response.json()).toEqual({ message: "'It works!'" });
});

it('should handle errors gracefully', async () => {
process.env.TEST_ERROR = 'true';
const response = await GET();
expect(response.status).toBe(500);
expect(await response.json()).toEqual({
message: 'An error occurred while health check.',
});
process.env.TEST_ERROR = 'false';
});
});
17 changes: 4 additions & 13 deletions src/app/api/users/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,13 @@ import { NextResponse } from 'next/server';

const prisma = new PrismaClient();

export async function POST(req: Request) {
export async function POST(request: Request) {
const { email, name } = await request.json();
try {
const { name, email, posts, profile } = await req.json();
const user = await prisma.user.create({
data: {
name: name,
email: email,
posts: {
create: { title: posts },
},
profile: {
create: { bio: profile },
},
},
data: { email, name },
});
return NextResponse.json(user);
return NextResponse.json(user, { status: 201 });
} catch (error) {
return NextResponse.json(
{ message: 'An error occurred while creating the user.' },
Expand Down
45 changes: 24 additions & 21 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
'use client';
import Link from 'next/link';
import axios from 'axios';
import { useState } from 'react';
import type { NextPage } from 'next';

// use client
const Home: NextPage = () => {
const [title, setTitle] = useState('');
const [content, setContent] = useState('');
Expand All @@ -26,26 +26,29 @@ const Home: NextPage = () => {
};

return (
<form onSubmit={handleSubmit}>
<div>
<label htmlFor="title">Title:</label>
<input
type="text"
id="title"
value={title}
onChange={e => setTitle(e.target.value)}
/>
</div>
<div>
<label htmlFor="content">Content:</label>
<textarea
id="content"
value={content}
onChange={e => setContent(e.target.value)}
/>
</div>
<button type="submit">Submit</button>
</form>
<div>
<form onSubmit={handleSubmit}>
<div>
<label htmlFor="title">Title:</label>
<input
type="text"
id="title"
value={title}
onChange={e => setTitle(e.target.value)}
/>
</div>
<div>
<label htmlFor="content">Content:</label>
<textarea
id="content"
value={content}
onChange={e => setContent(e.target.value)}
/>
</div>
<button type="submit">Submit</button>
</form>
<Link href="/users">Create User</Link>
</div>
);
};

Expand Down
52 changes: 52 additions & 0 deletions src/app/users/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
'use client';
import axios from 'axios';
import { useState } from 'react';
import type { NextPage } from 'next';

const CreateUser: NextPage = () => {
const [email, setEmail] = useState('');
const [name, setName] = useState('');

const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
try {
const response = await axios.post('/api/users', {
email,
name,
});
console.log(response.data);
alert('User created!');
setEmail('');
setName('');
} catch (error) {
console.error(error);
alert('Failed to create user');
}
};

return (
<form onSubmit={handleSubmit}>
<div>
<label htmlFor="email">Email:</label>
<input
type="email"
id="email"
value={email}
onChange={e => setEmail(e.target.value)}
/>
</div>
<div>
<label htmlFor="name">Name:</label>
<input
type="text"
id="name"
value={name}
onChange={e => setName(e.target.value)}
/>
</div>
<button type="submit">Submit</button>
</form>
);
};

export default CreateUser;

0 comments on commit d9f76bd

Please sign in to comment.