Compare commits

..

4 commits

10 changed files with 31 additions and 34 deletions

View file

@ -1,11 +1,12 @@
.components__member_card {
display: grid;
grid-template-rows: 1fr 5rem;
min-width: 15rem;
grid-template-rows: 1fr auto;
width: 16rem;
aspect-ratio: 1;
box-shadow: 0 0 0.4rem 0.2rem var(--_translucent);
border: var(--_border-size) solid transparent;
background-size: cover;
background-size: 90%;
background-position-x: center;
background-repeat: no-repeat;
&:has(a:focus-visible),
@ -15,6 +16,7 @@
& h3 {
margin: 0;
text-align: center;
}
& a {

View file

@ -35,8 +35,8 @@
":islands/": "./islands/",
":src/": "./src/",
":types": "./types.ts",
"@cohabit/cohamail/": "./packages/@cohabit__cohamail@0.2.1/",
"@cohabit/ressources_manager/": "./packages/@cohabit__ressources_manager@0.1.3/",
"@cohabit/mailer": "jsr:@cohabit/mailer@^0.3.3",
"@cohabit/resources-manager": "jsr:@cohabit/resources-manager@^0.2.1",
"@deno/gfm": "https://deno.land/x/gfm@0.6.0/mod.ts",
"@jotsr/delayed": "jsr:@jotsr/delayed@^2.1.1",
"@jotsr/smart-css-bundler": "jsr:@jotsr/smart-css-bundler@^0.3.0",
@ -59,10 +59,6 @@
"jsx": "react-jsx",
"jsxImportSource": "preact"
},
"workspaces": [
"packages/@cohabit__cohamail@0.2.1",
"packages/@cohabit__ressources_manager@0.1.3"
],
"unstable": [
"kv"
]

View file

@ -5,9 +5,9 @@ import { FreshContext } from '$fresh/server.ts'
import { db } from ':src/db/mod.ts'
import { SessionHandlers, SessionStore } from ':src/session/mod.ts'
import { respondApi } from ':src/utils.ts'
import { Contact, type Mail, send } from '@cohabit/cohamail/mod.ts'
import { magicLinkTemplate } from '@cohabit/cohamail/templates/mod.ts'
import { User } from '@cohabit/ressources_manager/src/models/mod.ts'
import { Contact, type Mail, send } from '@cohabit/mailer'
import { magicLinkTemplate } from '@cohabit/mailer/templates'
import { User } from '@cohabit/resources-manager/models'
import { sleep } from '@jotsr/delayed'
type MagicLinkInfos = {
@ -17,7 +17,7 @@ type MagicLinkInfos = {
}
export async function getUserByMail(email: string): Promise<User | undefined> {
const [user] = await db.ressource.user
const [user] = await db.resource.user
.list((user) => user.mail === email)
.take(1)
.toArray()

View file

@ -2,8 +2,7 @@ import { db } from ':src/db/mod.ts'
import type { SessionHandlers } from ':src/session/mod.ts'
import { respondApi } from ':src/utils.ts'
import { getRelyingParty } from ':src/webauthn/mod.ts'
import { Credential, Ref, User } from '@cohabit/ressources_manager/mod.ts'
import { Passkey } from '@cohabit/ressources_manager/src/models/src/credential.ts'
import { Credential, Passkey, Ref, User } from '@cohabit/resources-manager/models'
import {
generateAuthenticationOptions,
verifyAuthenticationResponse,
@ -32,7 +31,7 @@ export const handler: SessionHandlers = {
const { email } = await req.json() as WebAuthnLoginStartPayload
// Get user credentials
const [user] = await db.ressource.user.list((user) => user.mail === email)
const [user] = await db.resource.user.list((user) => user.mail === email)
.take(1).toArray()
// Resolve refs to credentials
const resolver = Ref.dbResolver(db)
@ -121,7 +120,7 @@ export const handler: SessionHandlers = {
const newPasskey = { ...passkey, counter: newCounter }
// Update credential store
const [credential] = await db.ressource.credential.list(
const [credential] = await db.resource.credential.list(
(credential) => {
if (credential.category !== 'passkey') {
return false
@ -131,7 +130,7 @@ export const handler: SessionHandlers = {
).toArray()
// Save credential to db
await db.ressource.credential.set([
await db.resource.credential.set([
credential.update({ store: newPasskey }),
])

View file

@ -12,8 +12,7 @@ import type {
//TODO improve workspace imports
import { db } from ':src/db/mod.ts'
import { getRelyingParty } from ':src/webauthn/mod.ts'
import { Credential, Ref, User } from '@cohabit/ressources_manager/mod.ts'
import { Passkey } from '@cohabit/ressources_manager/src/models/src/credential.ts'
import { Credential, Passkey, Ref, User } from '@cohabit/resources-manager/models'
import { encodeBase64 } from '@std/encoding'
type Params = { step: 'start' | 'finish' }
@ -42,7 +41,7 @@ export const handler: SessionHandlers = {
// Get user credentials
// Ensure latest user datas
const dbUser = await db.ressource.user.get(user)
const dbUser = await db.resource.user.get(user)
// Resolve refs to credentials
const resolver = Ref.dbResolver(db)
const credentials = await Promise.all(dbUser.credentials.map(resolver))
@ -117,16 +116,16 @@ export const handler: SessionHandlers = {
// create and save new Credentials
const credential = Credential.load({ name, category: 'passkey', store })
await db.ressource.credential.set([credential])
await db.resource.credential.set([credential])
// Update user credentials
// Ensure latest user datas
const dbUser = await db.ressource.user.get(user)
const dbUser = await db.resource.user.get(user)
// Append new credentials
const credentials = [...dbUser.credentials, credential.toRef()]
const updatedUser = user.update({ credentials })
// Save user to db
await db.ressource.user.set([updatedUser])
await db.resource.user.set([updatedUser])
// Update session
ctx.state.session.set('user', updatedUser)

View file

@ -51,7 +51,7 @@ export default function Home() {
</section>
<section>
<h2>Nos membres</h2>
<AutoGrid columnWidth='15rem' style={{ alignItems: 'center' }}>
<AutoGrid columnWidth='16rem' style={{ alignItems: 'center' }}>
<MemberCardList
limit={4}
usePlaceholder={true}

View file

@ -6,7 +6,7 @@ import { fetchCarnet, userToMemberCardProps } from ':src/members/mod.ts'
export default async function Member(_: Request, { params, url }: PageProps) {
const uuid = params.id as ReturnType<Crypto['randomUUID']>
const user = await db.ressource.user.get({ uuid }).catch(() => undefined)
const user = await db.resource.user.get({ uuid }).catch(() => undefined)
if (!user) {
return <h3>Membre inconnu, peut être serez vous le prochain</h3>

View file

@ -1,7 +1,7 @@
import LoginForm from ':islands/LoginForm.tsx'
import PassKeyRegister from ':islands/PassKeyRegister.tsx'
import type { SessionPageProps } from ':src/session/mod.ts'
import type { User } from '@cohabit/ressources_manager/mod.ts'
import type { User } from '@cohabit/resources-manager/models'
import { Button } from 'univoq'
export default function Profil({ state }: SessionPageProps) {

View file

@ -1,10 +1,10 @@
import { Db, Group } from '@cohabit/ressources_manager/mod.ts'
import { Db } from '@cohabit/resources-manager/db'
import { Group, User } from '@cohabit/resources-manager/models'
import type { MailAddress } from '@cohabit/resources-manager/types'
// Import Datas
import { exists } from '$std/fs/exists.ts'
import { ensureDir } from '$std/fs/mod.ts'
import { User } from '@cohabit/ressources_manager/src/models/mod.ts'
import { MailAddress } from '@cohabit/ressources_manager/types.ts'
import groups from ":src/db/mock/groups.json" with { type: 'json' }
import users from ":src/db/mock/users.json" with { type: 'json' }
@ -21,13 +21,13 @@ if (!dbExist) {
// Load groups to DB
for (const { name } of groups) {
const group = Group.load({ name })
db.ressource.group.set([group])
db.resource.group.set([group])
}
// Load users to DB
for (const { lastname, firstname, mail, groups: groupNames } of users) {
// Get groups of user
const groups = await db.ressource.group.listRef((group) =>
const groups = await db.resource.group.listRef((group) =>
groupNames.includes(group.name)
)
@ -38,6 +38,6 @@ if (!dbExist) {
groups,
})
db.ressource.user.set([user])
db.resource.user.set([user])
}
}

View file

@ -1,6 +1,7 @@
import { MemberCardProps } from ':components/MemberCard.tsx'
import { db } from ':src/db/mod.ts'
import { Db, Ref, User } from '@cohabit/ressources_manager/mod.ts'
import { Db } from '@cohabit/resources-manager/db'
import { Ref, User } from '@cohabit/resources-manager/models'
export async function fetchCarnet(login: string): Promise<string> {
try {