Initial upload, docker environment
This commit is contained in:
commit
c1b4875f4e
|
@ -0,0 +1,2 @@
|
|||
/phpdocker/postgres-data
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
# PVVMDB
|
||||
## A new attempt to keep records of PVV members
|
||||
|
||||
The projects should keep track of some basic member information:
|
||||
- Usernames of all existing users
|
||||
- Basic contact information
|
||||
- Membership payments
|
||||
- Disk Quota payments
|
||||
|
||||
This will help us keep track of:
|
||||
- Active and inactive members (based on payment of the membership fee)
|
||||
- Total disk quota
|
||||
- Date of registration
|
||||
|
||||
This information gives us the ability to lock inactive user accounts, and keep statistics of our userbase.
|
||||
Locking inactive accounts is useful for security reasons and to incentivize actually paying the fee.
|
||||
|
||||
## Requirements
|
||||
|
||||
There are two recommended ways of running the application:
|
||||
|
||||
### Docker-compose / dev
|
||||
The development environment is available through docker, as described below.
|
||||
This includes a database and all required runtimes.
|
||||
Requires:
|
||||
|
||||
- Docker
|
||||
- Docker-compose
|
||||
|
||||
## Production / native
|
||||
As the application is a normal PHP application, you will need:
|
||||
|
||||
- PHP (Tested with 8.2)
|
||||
- A web server (e.g. nginx)
|
||||
- php-pgsql
|
||||
- A PostgreSQL server
|
||||
|
||||
|
||||
## Development
|
||||
|
||||
The project is written in basic PHP, without external frameworks.
|
||||
The dev environment is built with docker-compose, and contains a PostgreSQL database, php-fpm and nginx.
|
||||
|
||||
Start it by running `docker-compose up -d`.
|
||||
|
||||
You can then view the page at [localhost:3010](http://localhost:3010).
|
||||
|
||||
The database can be administered with [adminer](http://localhost:3010/adminer-4.8.1.php).
|
||||
|
||||
Some docs should probably be written in /docs
|
||||
|
||||
Some tools should probably be made in /utils
|
||||
|
||||
## TODO:
|
||||
|
||||
- Start Web interface
|
||||
- Input methods:
|
||||
- [ ] Web form
|
||||
- [ ] Import from bank statements (PDF/CSV)
|
||||
- [ ] Import from GNUCash
|
||||
- Make admin system
|
||||
- Save list of admins or integrate with www.pvv.ntnu.no/admin/
|
||||
- Auth / login, one of:
|
||||
- SSO with idp.pvv.ntnu.no
|
||||
- PAM / Unix auth
|
||||
- Integrate with PVV "New user" scripts
|
||||
- Allow normal users to update their own contact info?
|
||||
- ...
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
# test -e composer.phar || curl -O https://getcomposer.org/composer.phar
|
||||
|
||||
php -S ${DOCKER_HOST:-[::1]}:${DOCKER_PORT:-1080} -d error_reporting=E_ALL -d display_errors=1 -t src/
|
|
@ -0,0 +1,32 @@
|
|||
###############################################################################
|
||||
# Generated on phpdocker.io #
|
||||
###############################################################################
|
||||
version: '3.1'
|
||||
services:
|
||||
postgres:
|
||||
image: 'postgres:11.1-alpine'
|
||||
working_dir: /docker
|
||||
volumes:
|
||||
- ./phpdocker/postgres-data:/var/lib/postgresql/data
|
||||
environment:
|
||||
- POSTGRES_USER=pvvmdb
|
||||
- POSTGRES_PASSWORD=pvvmdb
|
||||
- POSTGRES_DB=pvvmdb
|
||||
ports:
|
||||
- '3014:5432'
|
||||
|
||||
webserver:
|
||||
image: 'nginx:alpine'
|
||||
working_dir: /docker
|
||||
volumes:
|
||||
- ./src:/docker
|
||||
- ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
|
||||
ports:
|
||||
- '3010:80'
|
||||
|
||||
php-fpm:
|
||||
build: phpdocker/php-fpm
|
||||
working_dir: /docker
|
||||
volumes:
|
||||
- ./src:/docker
|
||||
- ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.2/fpm/conf.d/99-overrides.ini
|
Binary file not shown.
After Width: | Height: | Size: 31 KiB |
|
@ -0,0 +1,50 @@
|
|||
@startuml
|
||||
|
||||
entity "User" as user {
|
||||
id: int
|
||||
--
|
||||
* username: string
|
||||
name: string
|
||||
phone: string
|
||||
external_email: string
|
||||
first_created: date
|
||||
locked: boolean
|
||||
comment: string
|
||||
}
|
||||
|
||||
entity "Purchase" as purchase {
|
||||
id: int
|
||||
--
|
||||
* _user_id_: int
|
||||
* amount_paid: number
|
||||
* date: date
|
||||
comment: string
|
||||
}
|
||||
|
||||
entity "Disk Purchase" as disk_purchase {
|
||||
--
|
||||
* size_mb: int
|
||||
}
|
||||
|
||||
entity "Membership Type" as membership_type {
|
||||
id: int
|
||||
--
|
||||
* name: string
|
||||
* price: number
|
||||
comment: string
|
||||
}
|
||||
|
||||
entity "Membership Purchase" as membership_purchase {
|
||||
--
|
||||
* _membership_type_id_: int
|
||||
}
|
||||
|
||||
|
||||
user "1..1" -- "0..*" purchase : makes
|
||||
disk_purchase --|> purchase
|
||||
membership_purchase --|> purchase
|
||||
|
||||
membership_type "1..1" -- "0..*" membership_purchase : is
|
||||
|
||||
|
||||
@enduml
|
|
@ -0,0 +1,208 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>PHPDocker.io Readme</title>
|
||||
<link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/pure-min.css">
|
||||
|
||||
<style>
|
||||
code {
|
||||
background-color : #ddd;
|
||||
padding : 2px 5px;
|
||||
font-family : monospace;
|
||||
font-size : 16px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-1-24"></div>
|
||||
<div class="pure-u-22-24">
|
||||
<h1>PHPDocker.io generated environment</h1>
|
||||
|
||||
<h1>Add to your project</h1>
|
||||
|
||||
<p>Simply, unzip the file into your project, this will create <code>docker-compose.yml</code> on the root of your project and a folder
|
||||
named <code>phpdocker</code> containing nginx and php-fpm config for it.</p>
|
||||
|
||||
<p>Ensure the webserver config on <code>phpdocker/nginx/nginx.conf</code> is correct for your project. PHPDocker.io will have
|
||||
customised this file according to the front controller location relative to the docker-compose file you chose on the
|
||||
generator (by default <code>public/index.php</code>).</p>
|
||||
|
||||
<p>Note: you may place the files elsewhere in your project. Make sure you modify the locations for the php-fpm dockerfile,
|
||||
the php.ini overrides and nginx config on <code>docker-compose.yml</code> if you do so.</p>
|
||||
|
||||
<h1>How to run</h1>
|
||||
|
||||
<p>Dependencies:</p>
|
||||
|
||||
<ul>
|
||||
<li>docker. See <a href="https://docs.docker.com/engine/installation">https://docs.docker.com/engine/installation</a></li>
|
||||
<li>docker-compose. See <a href="https://docs.docker.com/compose/install/">docs.docker.com/compose/install</a></li>
|
||||
</ul>
|
||||
|
||||
<p>Once you're done, simply <code>cd</code> to your project and run <code>docker-compose up -d</code>. This will initialise and start all the
|
||||
containers, then leave them running in the background.</p>
|
||||
|
||||
<h2>Services exposed outside your environment</h2>
|
||||
|
||||
<p>You can access your application via <strong><code>localhost</code></strong>. Mailhog and nginx both respond to any hostname, in case you want to
|
||||
add your own hostname on your <code>/etc/hosts</code></p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Service</th>
|
||||
<th>Address outside containers</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Webserver</td>
|
||||
<td><a href="http://localhost:3010">localhost:3010</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>PostgreSQL</td>
|
||||
<td><strong>host:</strong> <code>localhost</code>; <strong>port:</strong> <code>3014</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Hosts within your environment</h2>
|
||||
|
||||
<p>You'll need to configure your application to use any services you enabled:</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Service</th>
|
||||
<th>Hostname</th>
|
||||
<th>Port number</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>php-fpm</td>
|
||||
<td>php-fpm</td>
|
||||
<td>9000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Postgres</td>
|
||||
<td>postgres</td>
|
||||
<td>5432 (default)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h1>Docker compose cheatsheet</h1>
|
||||
|
||||
<p><strong>Note:</strong> you need to cd first to where your docker-compose.yml file lives.</p>
|
||||
|
||||
<ul>
|
||||
<li>Start containers in the background: <code>docker-compose up -d</code></li>
|
||||
<li>Start containers on the foreground: <code>docker-compose up</code>. You will see a stream of logs for every container running.
|
||||
ctrl+c stops containers.</li>
|
||||
<li>Stop containers: <code>docker-compose stop</code></li>
|
||||
<li>Kill containers: <code>docker-compose kill</code></li>
|
||||
<li>View container logs: <code>docker-compose logs</code> for all containers or <code>docker-compose logs SERVICE_NAME</code> for the logs of
|
||||
all containers in <code>SERVICE_NAME</code>.</li>
|
||||
<li>Execute command inside of container: <code>docker-compose exec SERVICE_NAME COMMAND</code> where <code>COMMAND</code> is whatever you want
|
||||
to run. Examples:
|
||||
|
||||
<ul>
|
||||
<li>Shell into the PHP container, <code>docker-compose exec php-fpm bash</code></li>
|
||||
<li>Run symfony console, <code>docker-compose exec php-fpm bin/console</code></li>
|
||||
<li>Open a mysql shell, <code>docker-compose exec mysql mysql -uroot -pCHOSEN_ROOT_PASSWORD</code></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<h1>Application file permissions</h1>
|
||||
|
||||
<p>As in all server environments, your application needs the correct file permissions to work properly. You can change the
|
||||
files throughout the container, so you won't care if the user exists or has the same ID on your host.</p>
|
||||
|
||||
<p><code>docker-compose exec php-fpm chown -R www-data:www-data /docker/public</code></p>
|
||||
|
||||
<h1>Recommendations</h1>
|
||||
|
||||
<p>It's hard to avoid file permission issues when fiddling about with containers due to the fact that, from your OS point
|
||||
of view, any files created within the container are owned by the process that runs the docker engine (this is usually
|
||||
root). Different OS will also have different problems, for instance you can run stuff in containers
|
||||
using <code>docker exec -it -u $(id -u):$(id -g) CONTAINER_NAME COMMAND</code> to force your current user ID into the process, but
|
||||
this will only work if your host OS is Linux, not mac. Follow a couple of simple rules and save yourself a world of
|
||||
hurt.</p>
|
||||
|
||||
<ul>
|
||||
<li>Run composer outside of the php container, as doing so would install all your dependencies owned by <code>root</code> within your
|
||||
vendor folder.</li>
|
||||
<li>Run commands (ie Symfony's console, or Laravel's artisan) straight inside of your container. You can easily open a
|
||||
shell as described above and do your thing from there.</li>
|
||||
</ul>
|
||||
|
||||
<h1>Simple basic Xdebug configuration with integration to PHPStorm</h1>
|
||||
|
||||
<h2>Xdebug 2</h2>
|
||||
|
||||
<p>To configure <strong>Xdebug 2</strong> you need add these lines in php-fpm/php-ini-overrides.ini:</p>
|
||||
|
||||
<h3>For linux:</h3>
|
||||
|
||||
<pre><code>xdebug.remote_enable = 1
|
||||
xdebug.remote_connect_back = 1
|
||||
xdebug.remote_autostart = 1
|
||||
</code></pre>
|
||||
|
||||
<h3>For macOS and Windows:</h3>
|
||||
|
||||
<pre><code>xdebug.remote_enable = 1
|
||||
xdebug.remote_host = host.docker.internal
|
||||
xdebug.remote_autostart = 1
|
||||
</code></pre>
|
||||
|
||||
<h2>Xdebug 3</h2>
|
||||
|
||||
<p>To configure <strong>Xdebug 3</strong> you need add these lines in php-fpm/php-ini-overrides.ini:</p>
|
||||
|
||||
<h3>For linux:</h3>
|
||||
|
||||
<pre><code>xdebug.mode = debug
|
||||
xdebug.remote_connect_back = true
|
||||
xdebug.start_with_request = yes
|
||||
</code></pre>
|
||||
|
||||
<h3>For macOS and Windows:</h3>
|
||||
|
||||
<pre><code>xdebug.mode = debug
|
||||
xdebug.remote_host = host.docker.internal
|
||||
xdebug.start_with_request = yes
|
||||
</code></pre>
|
||||
|
||||
<h2>Add the section “environment” to the php-fpm service in docker-compose.yml:</h2>
|
||||
|
||||
<pre><code>environment:
|
||||
PHP_IDE_CONFIG: "serverName=Docker"
|
||||
</code></pre>
|
||||
|
||||
<h3>Create a server configuration in PHPStorm:</h3>
|
||||
|
||||
<ul>
|
||||
<li>In PHPStorm open Preferences | Languages & Frameworks | PHP | Servers</li>
|
||||
<li>Add new server</li>
|
||||
<li>The “Name” field should be the same as the parameter “serverName” value in “environment” in docker-compose.yml (i.e. *
|
||||
Docker* in the example above)</li>
|
||||
<li>A value of the "port" field should be the same as first port(before a colon) in "webserver" service in
|
||||
docker-compose.yml</li>
|
||||
<li>Select "Use path mappings" and set mappings between a path to your project on a host system and the Docker container.</li>
|
||||
<li>Finally, add “Xdebug helper” extension in your browser, set breakpoints and start debugging</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pure-u-1-24"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var tables = document.getElementsByTagName('table')
|
||||
for (var i = 0; i < tables.length; i++) {
|
||||
tables[i].className = 'pure-table'
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,144 @@
|
|||
PHPDocker.io generated environment
|
||||
==================================
|
||||
|
||||
# Add to your project #
|
||||
|
||||
Simply, unzip the file into your project, this will create `docker-compose.yml` on the root of your project and a folder
|
||||
named `phpdocker` containing nginx and php-fpm config for it.
|
||||
|
||||
Ensure the webserver config on `phpdocker/nginx/nginx.conf` is correct for your project. PHPDocker.io will have
|
||||
customised this file according to the front controller location relative to the docker-compose file you chose on the
|
||||
generator (by default `public/index.php`).
|
||||
|
||||
Note: you may place the files elsewhere in your project. Make sure you modify the locations for the php-fpm dockerfile,
|
||||
the php.ini overrides and nginx config on `docker-compose.yml` if you do so.
|
||||
|
||||
# How to run #
|
||||
|
||||
Dependencies:
|
||||
|
||||
* docker. See [https://docs.docker.com/engine/installation](https://docs.docker.com/engine/installation)
|
||||
* docker-compose. See [docs.docker.com/compose/install](https://docs.docker.com/compose/install/)
|
||||
|
||||
Once you're done, simply `cd` to your project and run `docker-compose up -d`. This will initialise and start all the
|
||||
containers, then leave them running in the background.
|
||||
|
||||
## Services exposed outside your environment ##
|
||||
|
||||
You can access your application via **`localhost`**. Mailhog and nginx both respond to any hostname, in case you want to
|
||||
add your own hostname on your `/etc/hosts`
|
||||
|
||||
Service|Address outside containers
|
||||
-------|--------------------------
|
||||
Webserver|[localhost:3010](http://localhost:3010)
|
||||
PostgreSQL|**host:** `localhost`; **port:** `3014`
|
||||
|
||||
## Hosts within your environment ##
|
||||
|
||||
You'll need to configure your application to use any services you enabled:
|
||||
|
||||
Service|Hostname|Port number
|
||||
------|---------|-----------
|
||||
php-fpm|php-fpm|9000
|
||||
Postgres|postgres|5432 (default)
|
||||
|
||||
# Docker compose cheatsheet #
|
||||
|
||||
**Note:** you need to cd first to where your docker-compose.yml file lives.
|
||||
|
||||
* Start containers in the background: `docker-compose up -d`
|
||||
* Start containers on the foreground: `docker-compose up`. You will see a stream of logs for every container running.
|
||||
ctrl+c stops containers.
|
||||
* Stop containers: `docker-compose stop`
|
||||
* Kill containers: `docker-compose kill`
|
||||
* View container logs: `docker-compose logs` for all containers or `docker-compose logs SERVICE_NAME` for the logs of
|
||||
all containers in `SERVICE_NAME`.
|
||||
* Execute command inside of container: `docker-compose exec SERVICE_NAME COMMAND` where `COMMAND` is whatever you want
|
||||
to run. Examples:
|
||||
* Shell into the PHP container, `docker-compose exec php-fpm bash`
|
||||
* Run symfony console, `docker-compose exec php-fpm bin/console`
|
||||
* Open a mysql shell, `docker-compose exec mysql mysql -uroot -pCHOSEN_ROOT_PASSWORD`
|
||||
|
||||
# Application file permissions #
|
||||
|
||||
As in all server environments, your application needs the correct file permissions to work properly. You can change the
|
||||
files throughout the container, so you won't care if the user exists or has the same ID on your host.
|
||||
|
||||
`docker-compose exec php-fpm chown -R www-data:www-data /docker/public`
|
||||
|
||||
# Recommendations #
|
||||
|
||||
It's hard to avoid file permission issues when fiddling about with containers due to the fact that, from your OS point
|
||||
of view, any files created within the container are owned by the process that runs the docker engine (this is usually
|
||||
root). Different OS will also have different problems, for instance you can run stuff in containers
|
||||
using `docker exec -it -u $(id -u):$(id -g) CONTAINER_NAME COMMAND` to force your current user ID into the process, but
|
||||
this will only work if your host OS is Linux, not mac. Follow a couple of simple rules and save yourself a world of
|
||||
hurt.
|
||||
|
||||
* Run composer outside of the php container, as doing so would install all your dependencies owned by `root` within your
|
||||
vendor folder.
|
||||
* Run commands (ie Symfony's console, or Laravel's artisan) straight inside of your container. You can easily open a
|
||||
shell as described above and do your thing from there.
|
||||
|
||||
# Simple basic Xdebug configuration with integration to PHPStorm
|
||||
|
||||
## Xdebug 2
|
||||
|
||||
To configure **Xdebug 2** you need add these lines in php-fpm/php-ini-overrides.ini:
|
||||
|
||||
### For linux:
|
||||
|
||||
```
|
||||
xdebug.remote_enable = 1
|
||||
xdebug.remote_connect_back = 1
|
||||
xdebug.remote_autostart = 1
|
||||
```
|
||||
|
||||
### For macOS and Windows:
|
||||
|
||||
```
|
||||
xdebug.remote_enable = 1
|
||||
xdebug.remote_host = host.docker.internal
|
||||
xdebug.remote_autostart = 1
|
||||
```
|
||||
|
||||
## Xdebug 3
|
||||
|
||||
To configure **Xdebug 3** you need add these lines in php-fpm/php-ini-overrides.ini:
|
||||
|
||||
### For linux:
|
||||
|
||||
```
|
||||
xdebug.mode = debug
|
||||
xdebug.remote_connect_back = true
|
||||
xdebug.start_with_request = yes
|
||||
```
|
||||
|
||||
### For macOS and Windows:
|
||||
|
||||
```
|
||||
xdebug.mode = debug
|
||||
xdebug.remote_host = host.docker.internal
|
||||
xdebug.start_with_request = yes
|
||||
```
|
||||
|
||||
## Add the section “environment” to the php-fpm service in docker-compose.yml:
|
||||
|
||||
```
|
||||
environment:
|
||||
PHP_IDE_CONFIG: "serverName=Docker"
|
||||
```
|
||||
|
||||
### Create a server configuration in PHPStorm:
|
||||
|
||||
* In PHPStorm open Preferences | Languages & Frameworks | PHP | Servers
|
||||
* Add new server
|
||||
* The “Name” field should be the same as the parameter “serverName” value in “environment” in docker-compose.yml (i.e. *
|
||||
Docker* in the example above)
|
||||
* A value of the "port" field should be the same as first port(before a colon) in "webserver" service in
|
||||
docker-compose.yml
|
||||
* Select "Use path mappings" and set mappings between a path to your project on a host system and the Docker container.
|
||||
* Finally, add “Xdebug helper” extension in your browser, set breakpoints and start debugging
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
server {
|
||||
listen 80 default;
|
||||
|
||||
client_max_body_size 108M;
|
||||
|
||||
access_log /var/log/nginx/application.access.log;
|
||||
|
||||
root /docker/.;
|
||||
index index.php;
|
||||
|
||||
# try to serve file directly, fallback to index.php
|
||||
location / {
|
||||
try_files $uri /index.php$is_args$args;
|
||||
}
|
||||
|
||||
if (!-e $request_filename) {
|
||||
rewrite ^.*$ /index.php last;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass php-fpm:9000;
|
||||
fastcgi_index index.php;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
|
||||
fastcgi_buffers 16 16k;
|
||||
fastcgi_buffer_size 32k;
|
||||
include fastcgi_params;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
FROM phpdockerio/php:8.2-fpm
|
||||
WORKDIR "/docker"
|
||||
|
||||
RUN apt-get update; \
|
||||
apt-get -y --no-install-recommends install \
|
||||
php8.2-pgsql; \
|
||||
apt-get clean; \
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
|
|
@ -0,0 +1,2 @@
|
|||
upload_max_filesize = 100M
|
||||
post_max_size = 108M
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,8 @@
|
|||
<?php
|
||||
|
||||
$db_host = "postgres";
|
||||
$db_name = "pvvmdb";
|
||||
$db_user = "pvvmdb";
|
||||
$db_pass= "pvvmdb";
|
||||
|
||||
?>
|
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
include_once 'db_config.php';
|
||||
$dbconn = pg_connect("host=$db_host dbname=$db_name user=$db_user password=$db_pass")
|
||||
or die('Could not connect: ' . pg_last_error());
|
||||
|
||||
?>
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
include('./db_connect.php');
|
||||
|
||||
|
||||
$res = pg_query($dbconn, "SELECT * FROM users");
|
||||
if (!$res) {
|
||||
echo "An error occurred.\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
while ($row = pg_fetch_row($res)) {
|
||||
echo "id: $row[0] username: $row[1]";
|
||||
}
|
||||
|
||||
?>
|
|
@ -0,0 +1,45 @@
|
|||
CREATE TABLE IF NOT EXISTS "users" (
|
||||
"id" serial PRIMARY KEY,
|
||||
"name" varchar(255) NOT NULL,
|
||||
"username" varchar(32) UNIQUE NOT NULL,
|
||||
"phone" varchar(32),
|
||||
"external_email" varchar(320),
|
||||
"locked" boolean NOT NULL DEFAULT false,
|
||||
"created_at" date NOT NULL DEFAULT CURRENT_DATE,
|
||||
"comment" varchar(255)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "membership_types" (
|
||||
"id" serial PRIMARY KEY,
|
||||
"name" varchar(32) UNIQUE NOT NULL,
|
||||
"description" varchar(400) NOT NULL,
|
||||
"price" integer NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "purchases" (
|
||||
"id" serial PRIMARY KEY,
|
||||
"user_id" integer NOT NULL,
|
||||
"created_at" date NOT NULL DEFAULT CURRENT_DATE,
|
||||
"amount_paid" integer NOT NULL,
|
||||
"comment" varchar(400),
|
||||
|
||||
CONSTRAINT "purchases_user_id_fkey" FOREIGN KEY ("user_id")
|
||||
REFERENCES "users" ("id") MATCH SIMPLE
|
||||
ON UPDATE NO ACTION ON DELETE NO ACTION
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "disk_purchases" (
|
||||
"size_mb" integer NOT NULL
|
||||
) INHERITS ("purchases");
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "membership_purchases" (
|
||||
"membership_type" integer NOT NULL,
|
||||
|
||||
CONSTRAINT "membership_purchases_membership_type_fkey" FOREIGN KEY ("membership_type")
|
||||
REFERENCES "membership_types" ("id") MATCH SIMPLE
|
||||
ON UPDATE NO ACTION ON DELETE NO ACTION
|
||||
) INHERITS ("purchases");
|
||||
|
||||
INSERT INTO membership_types (name, description, price) VALUES
|
||||
('Livstid', 'Livstidsmedlemskap, betales én gang, varer livet ut.', 1024),
|
||||
('Årlig Kontingent', 'Årlig medlemskap, en fast sum betales hvert år.', 50);
|
Loading…
Reference in New Issue