Commit a4fefec4 by Tuukka Kivilahti

Fixed graphQL and viplist is now using it

1 parent e53e5e2b
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"version": 1, "version": 1,
"newProjectRoot": "projects", "newProjectRoot": "projects",
"projects": { "projects": {
"angular6testi": { "moya-angular": {
"root": "", "root": "",
"sourceRoot": "src", "sourceRoot": "src",
"projectType": "application", "projectType": "application",
...@@ -48,18 +48,18 @@ ...@@ -48,18 +48,18 @@
"serve": { "serve": {
"builder": "@angular-devkit/build-angular:dev-server", "builder": "@angular-devkit/build-angular:dev-server",
"options": { "options": {
"browserTarget": "angular6testi:build" "browserTarget": "moya-angular:build"
}, },
"configurations": { "configurations": {
"production": { "production": {
"browserTarget": "angular6testi:build:production" "browserTarget": "moya-angular:build:production"
} }
} }
}, },
"extract-i18n": { "extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n", "builder": "@angular-devkit/build-angular:extract-i18n",
"options": { "options": {
"browserTarget": "angular6testi:build" "browserTarget": "moya-angular:build"
} }
}, },
"test": { "test": {
...@@ -93,7 +93,8 @@ ...@@ -93,7 +93,8 @@
} }
} }
}, },
"angular6testi-e2e": {
"moya-angular-e2e": {
"root": "e2e", "root": "e2e",
"sourceRoot": "e2e", "sourceRoot": "e2e",
"projectType": "application", "projectType": "application",
...@@ -102,7 +103,7 @@ ...@@ -102,7 +103,7 @@
"builder": "@angular-devkit/build-angular:protractor", "builder": "@angular-devkit/build-angular:protractor",
"options": { "options": {
"protractorConfig": "./protractor.conf.js", "protractorConfig": "./protractor.conf.js",
"devServerTarget": "angular6testi:serve" "devServerTarget": "moya-angular:serve"
} }
}, },
"lint": { "lint": {
...@@ -119,7 +120,7 @@ ...@@ -119,7 +120,7 @@
} }
} }
}, },
"defaultProject": "angular6testi", "defaultProject": "moya-angular",
"schematics": { "schematics": {
"@schematics/angular:component": { "@schematics/angular:component": {
"prefix": "moya", "prefix": "moya",
......
...@@ -16,9 +16,9 @@ import { NgModule } from '@angular/core'; ...@@ -16,9 +16,9 @@ import { NgModule } from '@angular/core';
import {LoginModule} from './modules/login/login.module'; import {LoginModule} from './modules/login/login.module';
import {LeftMenuModule} from './menu/left-menu/left-menu.module'; import {LeftMenuModule} from './menu/left-menu/left-menu.module';
import { FrontpageComponent } from './components/frontpage/frontpage.component'; import { FrontpageComponent } from './components/frontpage/frontpage.component';
import {HttpLink, HttpLinkModule} from "apollo-angular-link-http"; import {HttpLink, HttpLinkModule} from 'apollo-angular-link-http';
import {APOLLO_OPTIONS, ApolloModule} from "apollo-angular"; import {APOLLO_OPTIONS, ApolloModule} from 'apollo-angular';
import {createApollo} from "./shared/config/moya.config"; import {createApollo} from './shared/config/moya.config';
@NgModule({ @NgModule({
declarations: [ declarations: [
......
...@@ -6,7 +6,7 @@ import {MoyaLocale} from './moya-locale.model'; ...@@ -6,7 +6,7 @@ import {MoyaLocale} from './moya-locale.model';
import {HttpClient} from '@angular/common/http'; import {HttpClient} from '@angular/common/http';
import {TranslateService} from '@ngx-translate/core'; import {TranslateService} from '@ngx-translate/core';
import {MOYA_REST_URL} from "../../shared/config/moya.config"; import {MOYA_REST_URL} from '../../shared/config/moya.config';
export const ENGLISH = 'en'; export const ENGLISH = 'en';
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<mat-table #table [dataSource]="vips | async"> <mat-table #table [dataSource]="vips | async">
<ng-container matColumnDef="host"> <ng-container matColumnDef="host">
<mat-header-cell *matHeaderCellDef translate >vip.host </mat-header-cell> <mat-header-cell *matHeaderCellDef translate >vip.host </mat-header-cell>
<mat-cell *matCellDef="let v" > {{v.host.firstname}} {{ v.host.lastname}} </mat-cell> <mat-cell *matCellDef="let v" > {{v.host.user.firstname}} {{ v.host.user.lastname}} </mat-cell>
</ng-container> </ng-container>
<ng-container matColumnDef="shortdescr"> <ng-container matColumnDef="shortdescr">
......
/** /**
* Created by tuukka on 04/02/17. * Created by tuukka on 04/02/17.
*/ */
import gql from "graphql-tag"; import gql from 'graphql-tag';
export class VipProductDelivery { export class VipProductDelivery {
......
import {VipProductDelivery} from './vip-product-delivery.model'; import {VipProductDelivery} from './vip-product-delivery.model';
import gql from "graphql-tag"; import gql from 'graphql-tag';
/** /**
* Created by tuukka on 04/02/17. * Created by tuukka on 04/02/17.
*/ */
...@@ -12,10 +12,18 @@ export class VipProduct { ...@@ -12,10 +12,18 @@ export class VipProduct {
fragment vipProductPrimitives on VipProduct { fragment vipProductPrimitives on VipProduct {
id id
name name
notes
quantity quantity
} }
`; `;
/*
static fragmentsZ = gql`
fragment vipProductPrimitives on VipProduct {
id
name
notes
quantity
}
`;*/
id: number; id: number;
name: string; name: string;
......
import {VipProduct} from './vip-product.model'; import {VipProduct} from './vip-product.model';
import {User} from '../../../shared/models/user.model'; import {User} from '../../../shared/models/user.model';
import gql from "graphql-tag"; import gql from 'graphql-tag';
import {VipProductDelivery} from "./vip-product-delivery.model"; import {VipProductDelivery} from './vip-product-delivery.model';
/** /**
* Created by tuukka on 04/02/17. * Created by tuukka on 04/02/17.
*/ */
......
...@@ -10,17 +10,17 @@ import {UserService} from '../../shared/services/user.service'; ...@@ -10,17 +10,17 @@ import {UserService} from '../../shared/services/user.service';
import {HttpClient} from '@angular/common/http'; import {HttpClient} from '@angular/common/http';
import {MOYA_BASE_URL, MOYA_REST_URL} from "../../shared/config/moya.config"; import {MOYA_BASE_URL, MOYA_REST_URL} from '../../shared/config/moya.config';
import gql from 'graphql-tag'; import gql from 'graphql-tag';
import {EventUser} from "../../shared/models/event-user.model"; import {EventUser} from '../../shared/models/event-user.model';
import {Apollo} from "apollo-angular"; import {Apollo} from 'apollo-angular';
import "rxjs-compat/add/operator/map"; import 'rxjs-compat/add/operator/map';
import {first, map} from "rxjs/operators"; import {first, map} from 'rxjs/operators';
import {Error} from "tslint/lib/error"; import {Error} from 'tslint/lib/error';
export const Q_VIPS_N_DATA = gql` export const Q_VIPS_N_DATA = gql`
query Vips() { {
vips { vips {
...vipPrimitives ...vipPrimitives
products { products {
...@@ -35,16 +35,24 @@ export const Q_VIPS_N_DATA = gql` ...@@ -35,16 +35,24 @@ export const Q_VIPS_N_DATA = gql`
...userPrimitives ...userPrimitives
} }
} }
host {
...eventUserPrimitives
user {
...userPrimitives
}
}
} }
} }
${VipFragmentsCombined} ${VipFragmentsCombined}
${EventUser.fragments} ${EventUser.fragments}
${User.fragments} ${User.fragments}
`; `;
class VipsQueryRoot {
vips: Array<Vip>;
}
@Injectable() @Injectable()
...@@ -61,7 +69,8 @@ export class ViplistService { ...@@ -61,7 +69,8 @@ export class ViplistService {
* get vips * get vips
*/ */
public get(): Observable<Array<Vip>> { public get(): Observable<Array<Vip>> {
return this.apollo.watchQuery<Array<Vip>>({query: Q_VIPS_N_DATA}).valueChanges.pipe(map(x => x.data)); return this.apollo.watchQuery<VipsQueryRoot>({query: Q_VIPS_N_DATA}).valueChanges.pipe(map(x =>{ console.log(x.data.vips); return x.data.vips}));
// return this.apollo.query<vipsQueryRoot>({query: Q_VIPS_N_DATA}).pipe(map(x => x.data.vips));
} }
......
import {InMemoryCache} from "apollo-cache-inmemory"; import {InMemoryCache} from 'apollo-cache-inmemory';
import {HttpLink} from "apollo-angular-link-http"; import {HttpLink} from 'apollo-angular-link-http';
export const MOYA_BASE_URL = '/MoyaWeb/'; export const MOYA_BASE_URL = '/MoyaWeb/';
export const MOYA_REST_URL = MOYA_BASE_URL + 'rest/'; export const MOYA_REST_URL = MOYA_BASE_URL + 'rest/';
...@@ -7,7 +7,7 @@ export const MOYA_REST_URL = MOYA_BASE_URL + 'rest/'; ...@@ -7,7 +7,7 @@ export const MOYA_REST_URL = MOYA_BASE_URL + 'rest/';
export function createApollo(httpLink: HttpLink) { export function createApollo(httpLink: HttpLink) {
return { return {
link: httpLink.create({uri: MOYA_REST_URL + '/graphql'}), link: httpLink.create({uri: MOYA_BASE_URL + 'graphql'}),
cache: new InMemoryCache(), cache: new InMemoryCache(),
}; };
} }
import {User} from "./user.model"; import {User} from './user.model';
import gql from "graphql-tag"; import gql from 'graphql-tag';
export enum UserGender { export enum UserGender {
MALE, MALE,
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
// vim magic: %s/^\s*\w\+\s\+\(\w\+\)\s\+\(\w\+\)\s*.*;$/ \2: \L\1;/ // vim magic: %s/^\s*\w\+\s\+\(\w\+\)\s\+\(\w\+\)\s*.*;$/ \2: \L\1;/
import gql from "graphql-tag"; import gql from 'graphql-tag';
export enum UserGender { export enum UserGender {
MALE, MALE,
...@@ -18,6 +18,15 @@ export class User { ...@@ -18,6 +18,15 @@ export class User {
static fragments = gql` static fragments = gql`
fragment userPrimitives on User { fragment userPrimitives on User {
address address
birthday
email
}
`;
/*
static fragmentsZZ = gql`
fragment userPrimitives on User {
address
allergiesFreetext allergiesFreetext
birthday birthday
email email
...@@ -36,7 +45,7 @@ export class User { ...@@ -36,7 +45,7 @@ export class User {
`; `;
*/
nick: string; nick: string;
login: string; login: string;
......
...@@ -4,7 +4,7 @@ import {Injectable} from '@angular/core'; ...@@ -4,7 +4,7 @@ import {Injectable} from '@angular/core';
import {User} from '../models/user.model'; import {User} from '../models/user.model';
import {CacheService} from './cache.service'; import {CacheService} from './cache.service';
import {HttpClient} from '@angular/common/http'; import {HttpClient} from '@angular/common/http';
import {MOYA_REST_URL} from "../config/moya.config"; import {MOYA_REST_URL} from '../config/moya.config';
@Injectable() @Injectable()
......
...@@ -131,7 +131,6 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -131,7 +131,6 @@ public class TestDataBean implements TestDataBeanLocal {
u.resetPassword("kavija"); u.resetPassword("kavija");
u.setPhone("123-45679854"); u.setPhone("123-45679854");
u.setTown("Keikyän MLK"); u.setTown("Keikyän MLK");
u.setPostalTown("Keykyä");
u.setZip("393929"); u.setZip("393929");
userFacade.create(u); userFacade.create(u);
return u; return u;
...@@ -157,7 +156,6 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -157,7 +156,6 @@ public class TestDataBean implements TestDataBeanLocal {
u.resetPassword("admin"); u.resetPassword("admin");
u.setPhone("1337"); u.setPhone("1337");
u.setTown("Adminila"); u.setTown("Adminila");
u.setPostalTown("Adminila ");
u.setZip("6666"); u.setZip("6666");
// u.setSuperadmin(true); // u.setSuperadmin(true);
userFacade.create(u); userFacade.create(u);
......
...@@ -194,9 +194,6 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -194,9 +194,6 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
case "zip": case "zip":
sort = User_.zip; sort = User_.zip;
break; break;
case "postalTown":
sort = User_.postalTown;
break;
case "town": case "town":
sort = User_.town; sort = User_.town;
break; break;
......
...@@ -421,14 +421,6 @@ public class EventUser extends GenericEntity { ...@@ -421,14 +421,6 @@ public class EventUser extends GenericEntity {
return user.isSuperadmin(); return user.isSuperadmin();
} }
public void setPostalTown(String postalTown) {
user.setPostalTown(postalTown);
}
public String getPostalTown() {
return user.getPostalTown();
}
public void setGender(Gender gender) { public void setGender(Gender gender) {
user.setGender(gender); user.setGender(gender);
} }
......
...@@ -112,10 +112,6 @@ public interface IUser { ...@@ -112,10 +112,6 @@ public interface IUser {
public abstract boolean isSuperadmin(); public abstract boolean isSuperadmin();
public abstract void setPostalTown(String postalTown);
public abstract String getPostalTown();
public abstract void setGender(Gender gender); public abstract void setGender(Gender gender);
public abstract Gender getGender(); public abstract Gender getGender();
......
...@@ -346,15 +346,6 @@ public class User extends GenericEntity implements IUser { ...@@ -346,15 +346,6 @@ public class User extends GenericEntity implements IUser {
return superadmin; return superadmin;
} }
@Override
public void setPostalTown(String postalTown) {
this.postalTown = postalTown;
}
@Override
public String getPostalTown() {
return postalTown;
}
@Override @Override
public void setGender(Gender gender) { public void setGender(Gender gender) {
......
...@@ -29,7 +29,7 @@ public class VipProduct extends GenericEntity { ...@@ -29,7 +29,7 @@ public class VipProduct extends GenericEntity {
/** /**
* If product is null this is used as the name of the product * If product is null this is used as the name of the product
*/ */
private String name; private String name = "";
@ManyToOne() @ManyToOne()
@JoinColumn(nullable = true) @JoinColumn(nullable = true)
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
<hr /> <hr />
<h:outputText value="#{user.address}" /> <h:outputText value="#{user.address}" />
<br /> <br />
<h:outputText value="#{user.zip} #{user.postalTown}" /> <h:outputText value="#{user.zip} #{user.town}" />
<br /> <br />
<br /> <br />
<h:outputText value="#{user.phone}" /> <h:outputText value="#{user.phone}" />
......
package fi.codecrew.moya.graphql; package fi.codecrew.moya.graphql;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.internal.LinkedTreeMap;
import com.google.gson.reflect.TypeToken;
import fi.codecrew.moya.beans.*; import fi.codecrew.moya.beans.*;
import fi.codecrew.moya.entitysearch.UserSearchQuery; import fi.codecrew.moya.entitysearch.UserSearchQuery;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
...@@ -12,6 +15,7 @@ import fi.codecrew.moya.utilities.SearchResult; ...@@ -12,6 +15,7 @@ import fi.codecrew.moya.utilities.SearchResult;
import graphql.*; import graphql.*;
import graphql.schema.*; import graphql.schema.*;
import graphql.schema.idl.SchemaPrinter; import graphql.schema.idl.SchemaPrinter;
import org.primefaces.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -31,6 +35,7 @@ import java.io.IOException; ...@@ -31,6 +35,7 @@ import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter; import java.io.StringWriter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import static graphql.Scalars.*; import static graphql.Scalars.*;
...@@ -123,25 +128,61 @@ public class MoyaGraphQLServlet extends HttpServlet { ...@@ -123,25 +128,61 @@ public class MoyaGraphQLServlet extends HttpServlet {
} }
} }
graphql.ExecutionInput.Builder queryBuilder = new graphql.ExecutionInput.Builder();
String query = request.getParameter("query"); String query = request.getParameter("query");
executeQuery(query, response);
if(query == null) {
String q = request.getReader().lines().collect(Collectors.joining());
Map<String, Object> queryJson = new Gson()
.fromJson(
q,
new TypeToken<Map<String, Object>>(){}
.getType());
query = queryJson.get("query").toString();
//Map varJson = new Gson().fromJson(queryJson.get("variables"), Map.class);
//if (queryJson.get("variables") instanceof LinkedTreeMap)
queryBuilder.variables((LinkedTreeMap) queryJson.get("variables"));
}
queryBuilder.query(query);
executeQuery(queryBuilder, response);
} }
private void executeQuery(String query, HttpServletResponse response) throws IOException { private void executeQuery(ExecutionInput.Builder query, HttpServletResponse response) throws IOException {
GraphQL graphql = GraphQL.newGraphQL(schema).build(); GraphQL graphql = GraphQL.newGraphQL(schema).build();
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter(); PrintWriter writer = response.getWriter();
try { try {
Gson gson = new Gson(); Gson gson = new GsonBuilder().serializeNulls().create();
ExecutionResult exec = graphql.execute(query); ExecutionResult exec = graphql.execute(query);
logger.warn("Executed stuff errors: {}", exec.getErrors()); logger.warn("Executed stuff errors: {}", exec.getErrors());
if (exec.getErrors() != null && !exec.getErrors().isEmpty()) {
writer.write(gson.toJson(new ErrorContainer(exec.getErrors()))); Map<String, Object> returnMap = new HashMap<>();
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
if (exec.getData() != null) {
returnMap.put("data", exec.getData());
} else {
returnMap.put("data", "");
}
if (exec.getErrors() != null) {
returnMap.put("errors", exec.getErrors());
} else { } else {
Map<String, Object> data = exec.getData(); returnMap.put("errors", "");
writer.write(gson.toJson(data));
} }
writer.write(gson.toJson(returnMap));
} catch (Exception e) { } catch (Exception e) {
logger.warn("Got exception at graphql ", e); logger.warn("Got exception at graphql ", e);
writer.write("Error completing the query because of exception: " + e.getMessage()); writer.write("Error completing the query because of exception: " + e.getMessage());
...@@ -285,7 +326,6 @@ public class MoyaGraphQLServlet extends HttpServlet { ...@@ -285,7 +326,6 @@ public class MoyaGraphQLServlet extends HttpServlet {
b.addField(EventUser_.user); b.addField(EventUser_.user);
b.addField(EventUser_.event).type(builder.typeFor(SIMPLE_EVENT_TYPE_NAME)); b.addField(EventUser_.event).type(builder.typeFor(SIMPLE_EVENT_TYPE_NAME));
b.addField(EventUser_.eventuserCreated); b.addField(EventUser_.eventuserCreated);
b.addField(EventUser_.id);
b.addListField(Role.class).dataFetcher(environment -> userbean.findUsersRoles(environment.getSource())); b.addListField(Role.class).dataFetcher(environment -> userbean.findUsersRoles(environment.getSource()));
b.addListField(UsersEventUserproperty.class).dataFetcher(environment -> eventUserPropertyBean.getUserPropertiesForUser(environment.getSource()).stream().sorted(ENTITY_ID_SORTER).collect(toList())); b.addListField(UsersEventUserproperty.class).dataFetcher(environment -> eventUserPropertyBean.getUserPropertiesForUser(environment.getSource()).stream().sorted(ENTITY_ID_SORTER).collect(toList()));
b.addField(EventUser_.currentPlaces); b.addField(EventUser_.currentPlaces);
......
...@@ -48,8 +48,8 @@ ...@@ -48,8 +48,8 @@
<rewriteservlet.version>3.4.2.Final</rewriteservlet.version> <rewriteservlet.version>3.4.2.Final</rewriteservlet.version>
<iudex.standalone>1.0.23</iudex.standalone> <iudex.standalone>1.0.23</iudex.standalone>
<js.node.version>v8.11.3</js.node.version> <js.node.version>v10.8.0</js.node.version>
<js.npm.version>6.3.0</js.npm.version> <js.npm.version>6.2.0</js.npm.version>
<eirslett.frontend.version>1.4</eirslett.frontend.version> <eirslett.frontend.version>1.4</eirslett.frontend.version>
<payara.version>4.1.2.181</payara.version> <payara.version>4.1.2.181</payara.version>
</properties> </properties>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!