function create_user($request)
{
    $raw_input = $request->getBody();
    $content_type = explode(';', $request->type)[0];
    switch ($content_type) {
        case 'application/json':
            $input_data = json_decode($raw_input, true);
            break;
        case 'application/x-www-form-urlencoded':
            $input_data = array();
            parse_str($raw_input, $input_data);
            break;
        default:
            Util::output_errors_and_die('', 415);
    }
    if ($input_data === null) {
        Util::output_errors_and_die('', 400);
    }
    $fields = array('full_name' => '', 'email' => '', 'gender' => '', 'birth_date' => '', 'username' => '', 'role' => '');
    $user_data = array();
    foreach ($fields as $f => $v) {
        if (array_key_exists($f, $input_data)) {
            if (!is_string($input_data[$f])) {
                Util::output_errors_and_die('', 400);
            }
            $user_data[$f] = trim($input_data[$f]);
        } else {
            $user_data[$f] = '';
        }
    }
    if (isset($input_data['password'])) {
        if (!is_string($input_data['password'])) {
            Util::output_errors_and_die('', 400);
        }
        $user_data['password'] = $input_data['password'];
    }
    set_empty_if_undefined($user_data['password']);
    try {
        $model = new Model();
        $uid = $model->create_user($user_data);
    } catch (DatabaseException $e) {
        Util::output_errors_and_die($e->getMessage(), 503);
    } catch (ConflictException $e) {
        Util::output_errors_and_die($e->getMessage(), 409);
    } catch (Exception $e) {
        Util::output_errors_and_die($e->getMessage(), 400);
    }
    if ($uid) {
        http_response_code(201);
        header('Content-Type: text/plain');
        echo '/users/' . $uid;
        die;
    } else {
        Util::output_errors_and_die('', 400);
    }
}