Working on session

This commit is contained in:
eraden 2023-08-16 08:04:48 +02:00
parent 97c8383313
commit dcb2276ed3
10 changed files with 174 additions and 54 deletions

View File

@ -700,6 +700,40 @@ select {
--tw-backdrop-sepia: ;
}
.container {
width: 100%;
}
@media (min-width: 640px) {
.container {
max-width: 640px;
}
}
@media (min-width: 768px) {
.container {
max-width: 768px;
}
}
@media (min-width: 1024px) {
.container {
max-width: 1024px;
}
}
@media (min-width: 1280px) {
.container {
max-width: 1280px;
}
}
@media (min-width: 1536px) {
.container {
max-width: 1536px;
}
}
.sr-only {
position: absolute;
width: 1px;
@ -747,6 +781,10 @@ select {
margin-bottom: 1rem;
}
.mb-1 {
margin-bottom: 0.25rem;
}
.mb-2 {
margin-bottom: 0.5rem;
}
@ -759,6 +797,10 @@ select {
margin-bottom: 1.5rem;
}
.mr-1 {
margin-right: 0.25rem;
}
.mr-3 {
margin-right: 0.75rem;
}
@ -871,6 +913,12 @@ select {
justify-content: space-between;
}
.space-x-4 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(1rem * var(--tw-space-x-reverse));
margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
}
.divide-y > :not([hidden]) ~ :not([hidden]) {
--tw-divide-y-reverse: 0;
border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
@ -912,6 +960,10 @@ select {
border-width: 1px;
}
.border-2 {
border-width: 2px;
}
.border-gray-100 {
--tw-border-opacity: 1;
border-color: rgb(243 244 246 / var(--tw-border-opacity));
@ -979,6 +1031,11 @@ select {
padding-right: 1rem;
}
.px-6 {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
.py-2 {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
@ -1006,6 +1063,11 @@ select {
line-height: 2rem;
}
.text-5xl {
font-size: 3rem;
line-height: 1;
}
.text-base {
font-size: 1rem;
line-height: 1.5rem;
@ -1016,6 +1078,10 @@ select {
line-height: 1.25rem;
}
.font-bold {
font-weight: 700;
}
.font-medium {
font-weight: 500;
}
@ -1024,6 +1090,15 @@ select {
font-weight: 600;
}
.uppercase {
text-transform: uppercase;
}
.text-emerald-500 {
--tw-text-opacity: 1;
color: rgb(16 185 129 / var(--tw-text-opacity));
}
.text-gray-500 {
--tw-text-opacity: 1;
color: rgb(107 114 128 / var(--tw-text-opacity));
@ -1071,6 +1146,11 @@ select {
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.outline-none {
outline: 2px solid transparent;
outline-offset: 2px;
}
.transition {
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
@ -1079,10 +1159,24 @@ select {
transition-duration: 150ms;
}
.transition-all {
transition-property: all;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.duration-150 {
transition-duration: 150ms;
}
.duration-200 {
transition-duration: 200ms;
}
.ease-linear {
transition-timing-function: linear;
}
.hover\:bg-gray-100:hover {
--tw-bg-opacity: 1;
background-color: rgb(243 244 246 / var(--tw-bg-opacity));

View File

@ -6,7 +6,7 @@ use oswilno_contract::accounts;
use oswilno_contract::parking_space_rents;
use oswilno_contract::parking_spaces;
use oswilno_session::{Authenticated, MaybeAuthenticated};
use oswilno_view::{is_partial, Layout, Main, MainOpts, SessionOpts};
use oswilno_view::{is_partial, Layout, Main, MainOpts, SessionOpts, SearchOpts};
use sea_orm::prelude::*;
use sea_orm::ActiveValue::{NotSet, Set};
use std::collections::HashMap;
@ -45,41 +45,36 @@ async fn all_parking_spaces(
session: MaybeAuthenticated,
) -> HttpResponse {
let db = db.into_inner();
let parking_spaces = load_parking_spaces(db).await;
let main = Main {
body: parking_spaces,
opts: MainOpts {
session: session.into_option().map(|s| SessionOpts {
login: s.subject.to_owned(),
profile_image_url: None,
}),
search: Some(SearchOpts {
target_url: None,
autocomplete: Vec::with_capacity(0),
}),
..Default::default()
},
};
HttpResponse::Ok().body(
if is_partial(&req) {
Main {
body: parking_spaces,
opts: MainOpts {
session: session.into_option().map(|s| SessionOpts {
login: s.subject.to_owned(),
profile_image_url: None,
}),
..Default::default()
},
}
.render()
main.render()
} else {
Layout {
main: Main {
body: parking_spaces,
opts: MainOpts {
session: session.into_option().map(|s| SessionOpts {
login: s.subject.to_owned(),
profile_image_url: None,
}),
..Default::default()
},
},
}
.render()
Layout { main }.render()
}
.unwrap(),
)
}
#[post("/search")]
async fn search_parking_spaces() -> HttpResponse {
HttpResponse::Ok().body("")
}
#[autometrics]
#[get("/all-partial")]
async fn all_parial_parking_spaces(

View File

@ -1,18 +1,35 @@
<oswilno-parking-space-rents>
{% for parking_space_rent in parking_space_rents -%}
{% if let Some(parking_space) = parking_space_by_id.get(parking_space_rent.parking_space_id) %}
{% if let Some(account) = account_by_id.get(parking_space.account_id) %}
<oswilno-parking-space-rent id="parking-space-rent-{{ parking_space_rent.id }}">
<oswilno-parking-space id="parking-space-{{ parking_space.id }}">
<oswilno-account id="account-{{ account.id }}">
<div>{{ account.login }}</div>
</oswilno-account>
</oswilno-parking-space>
<oswilno-price id="parking-space-rent-{{ parking_space_rent.id }}-price" multiplier="100" currency="PLN" price="{{ parking_space_rent.price }}">
{{ parking_space_rent.price }}
</oswilno-price>
</oswilno-parking-space-rent>
{% endif %}
{% endif %}
{% endfor -%}
</oswilno-parking-space-rents>
<section class="container mx-auto px-4">
<section class="flex space-x-4">
<h1 class="text-white font-semibold text-5xl">
{{"Parking spaces"}}
</h1>
<div class="">
&nbsp;
</div>
<div>
</div>
<div>
<button class="text-emerald-500 background-transparent font-bold uppercase px-6 py-2 text-sm outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150 border-2 rounded-full">
<i class="fas fa-plus"></i>
</button>
</div>
</section>
<oswilno-parking-space-rents>
{% for parking_space_rent in parking_space_rents -%}
{% if let Some(parking_space) = parking_space_by_id.get(parking_space_rent.parking_space_id) %}
{% if let Some(account) = account_by_id.get(parking_space.account_id) %}
<oswilno-parking-space-rent id="parking-space-rent-{{ parking_space_rent.id }}">
<oswilno-parking-space id="parking-space-{{ parking_space.id }}">
<oswilno-account id="account-{{ account.id }}">
<div>{{ account.login }}</div>
</oswilno-account>
</oswilno-parking-space>
<oswilno-price id="parking-space-rent-{{ parking_space_rent.id }}-price" multiplier="100" currency="PLN" price="{{ parking_space_rent.price }}">
{{ parking_space_rent.price }}
</oswilno-price>
</oswilno-parking-space-rent>
{% endif %}
{% endif %}
{% endfor -%}
</oswilno-parking-space-rents>
</section>

View File

@ -1,5 +0,0 @@
{% extends "base.html" %}
{% block body %}
{% include "./all-partial.html" %}
{% endblock %}

View File

@ -241,6 +241,9 @@ async fn login_inner(
use sea_orm::*;
let account = match oswilno_contract::accounts::Entity::find()
.filter(oswilno_contract::accounts::Column::Login.eq(payload.login.as_str()))
.filter(oswilno_contract::accounts::Column::Banned.eq(false))
// TODO: Add email confirmation
//.filter(oswilno_contract::accounts::Column::Confirmed.eq(true))
.one(&*db)
.await
{

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

View File

@ -15,8 +15,8 @@ pub fn is_partial(req: &HttpRequest) -> bool {
}
#[derive(Debug, Default)]
pub struct SearchOptions {
pub target_url: String,
pub struct SearchOpts {
pub target_url: Option<String>,
pub autocomplete: Vec<(String, String)>,
}
@ -29,7 +29,7 @@ pub struct SessionOpts {
#[derive(Debug)]
pub struct MainOpts {
pub show: bool,
pub search: Option<SearchOptions>,
pub search: Option<SearchOpts>,
pub session: Option<SessionOpts>,
}

View File

@ -4,7 +4,10 @@
<title>OS Wilno</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script defer src="https://unpkg.com/@alpinejs/collapse@3.x.x/dist/cdn.min.js"></script>
<script src="https://unpkg.com/alpinejs" defer></script>
<script src="/assets/build.js" type="module"></script>
<link href="https://use.fontawesome.com/releases/v5.0.6/css/all.css" rel="stylesheet" />
<link href="/assets/style.css" rel="stylesheet">
{% block head %}
{% endblock %}

View File

@ -1,4 +1,6 @@
<main>
<main class="relative">
<div class="absolute top-0 w-full h-full bg-center bg-cover" style="background-image:url('/banner.jpg')">
</div>
{% include "navbar.html" %}
{{ body|safe }}
</main>

11
docker-compose.yml Normal file
View File

@ -0,0 +1,11 @@
version: '3.0'
services:
redash:
image: redash/redash:latest
ports:
- 6080:80
- 6088:8080
environment:
REDASH_SECRET_KEY: d6b9cb1efaf65aa77de4ae16c26720c962697394625d2df4f76ebd2e4ad8e38d
REDASH_COOKIE_SECRET: a0fac04203b7b2735c3dd94332bf672504f372f83b346db1fa7d2cf0a15bf7cd