Giter Club home page Giter Club logo

konfetti-app's People

Contributors

ashdavies avatar c0nscience avatar catarata02 avatar ktdynamic avatar mbernardes avatar ppachur avatar rootzoll avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

konfetti-app's Issues

unique users

Users should have unique nicknames and emails..

Check Password Recovery

we will work with the browser version in the beginning. make sure that email is sent on registering and password recovery is working.

list and delete accounts in admin gui

for testing I am creating a lot of test accounts. make it possible to list and delete accounts in admin GUI to clean up database after testing on production DB.

Failed to send eMail with coupons

When app is admin on a party on the more tab there is the option to generate coupons. But the backend fails to send this coupons to the users eMail. On my test the API was giving back a 500 wit the message "Was not able to send eMail with Coupons to [email protected]". locking the logs it said - was not able to connect to the configured email service. Try to get this running.

Exception on deleteAllNotificationsOlderThan

The PartyController around line 183 was trying to delete old not anymore needed notifications - to clean up space and dont have them shown up on other clients or new install of app. But causes Exception (see below). Deactivated for quick bug fix - but needs attention in the future.

18:49:49.670 ERROR 1 --- [http-nio-9000-exec-7] de.konfetti.controller.PartyController : Was not able to get optional client info on request for party(1): No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call
org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:413)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:246)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:491)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy99.deleteByUserIdAndPartyIdAndTimeStampLessThan(Unknown Source)
at de.konfetti.service.NotificationServiceImpl.deleteAllNotificationsOlderThan(NotificationServiceImpl.java:71)
at de.konfetti.controller.PartyController.getParty(PartyController.java:183)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:105)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:107)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:282)
at com.sun.proxy.$Proxy97.remove(Unknown Source)
at org.springframework.data.jpa.repository.query.JpaQueryExecution$DeleteExecution.doExecute(JpaQueryExecution.java:274)
at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:78)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:102)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:92)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:482)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:280)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
... 75 common frames omitted

User name and email not shown

If i login with email and password.. i dont see neither my email in the settings nor the username.. worse, there is a field to set an email for backup and important announcement, instead of showing my email I logged in with.

extra info on task missing when added on creation

On test5 step 15 the admin/clientB sees not the extra text info added by clientA on step 09. Check if this is an error on client side (not publishing or not displaying to admin) or something on the server side is missing.

Backend: Use Spring security?

In order to have proper security handling it might make sense to use Spring's built in security framework. Just not sure if that works with the device id stuff. Should though....

enum error on picture upload

When trying to upload an image (on changing profile image on request or on adding image as extra info to request) there is still a enum error I am not sure why.

See Logout on browser:
bildschirmfoto 2016-10-23 um 15 41 15

Detailed info on request return:

"Bad Request" exception:"org.springframework.http.converter.HttpMessageNotReadableException"
message:"Could not read document: Can not deserialize value of type de.konfetti.data.enums.MediaItemTypeEnum from String "TYPE_IMAGE": value not one of declared Enum instance names: [TYPE_MULTILANG, TYPE_DATE, TYPE_IMAGE, TYPE_UNKOWN, TYPE_LOCATION, TYPE_TEXT]↵ at [Source: java.io.PushbackInputStream@259ad086; line: 1, column: 9] (through reference chain: de.konfetti.data.MediaItem["type"]); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type de.konfetti.data.enums.MediaItemTypeEnum from String "TYPE_IMAGE": value not one of declared Enum instance names: [TYPE_MULTILANG, TYPE_DATE, TYPE_IMAGE, TYPE_UNKOWN, TYPE_LOCATION, TYPE_TEXT]↵ at [Source: java.io.PushbackInputStream@259ad086; line: 1, column: 9] (through reference chain: de.konfetti.data.MediaItem["type"])"
path:"/konfetti/api/media"

This has higher priority, because its a basic feature of the app needed for first test releases.

Connect Twitter, Facebook, ...

On WelcomeCamp a lot of community active attendees ask to connect konfetti to social media like twitter and facebook so that actions in konfatti app can be promoted and spread on social media. also think of a login via facebook for browser version.

The rule should be: konfetti should not depend on those third party services but should integrate them for additional features.

Log Management

I dont know spring boot well, is there a solution to pump the logs from running konfetti java backend into something like graylog to manage logs (warns and exception) in a comfort way?

I started to install graylog on our dev server. https://www.digitalocean.com/community/tutorials/how-to-install-graylog2-and-centralize-logs-on-ubuntu-14-04 --> At the step to test with graylog demo "sudo java -jar /opt/graylog2-server/graylog2-server.jar --debug" shows that still not connecting to elestic search (installed before like in tutorial).

Thats were my progress on this topic ended. But would be great if someone can catch up, get graylog running and configure our konfetti app to pump logs in dev-config-profile into graylog. For dev server access contact me.

Open to other log management solutions - if you make it run, that would be great :)

Backend: Performant Persistence/DataServices

In the Java Backend all Dataservices having to do with persistence are still very simple so that they just work. This would become a performance bottle neck as soon as we grow out of small beta testing.

The task to do would go thru the data services. Search for TODOS in the code and keep eye open how to better get the results. For example in the AccountingService: If it should deliver all transactions for one user, it gets ALL transactions from the database and then filters out the ones of the user with a for-loop. There should be better ways to do this within the Spring/JDBC. To refactor this soon, would be great. Thx.

test9 step03 - first reward dialog didnt finish

in a test run thru the first time when opening the reward dialog and selecting a the clientB, then pressing OK ... it just closed. On console there was this message:

Failed to load resource: the server responded with a status of 500

It worked in second try - check out why again while monitoring request calls on app and server.

i18n - switching lang on tasks

On dash board I reworked the app language select dialog. On changing the lang on desktop browser it switches - not on my mobile (Android, GalaxyS7). Check why.

Also the translated arabic shows up with a lot of ???????? - check on that too.

UI Dashboard in Firefox

Firefox OSX - selector on header bar is missplaced - take care and also check rest of UI with Firefox.

bildschirmfoto 2016-10-23 um 16 59 37

new exceptions to check

After the changes on the database with having the level of user like Admin or Reviewer persisted differently I got on error, when loading the party as an admin (working when normal user)

was not able to reproduce when i started fresh user and promoted to admin ... maybe this logs are a hint:

2016-11-10 10:15:36.043  WARN 1 --- [http-nio-8280-exec-8] de.konfetti.controller.PartyController   : PartyController getAllParties(): TODO: mustHaveParty to add to partylist
2016-11-10 10:15:36.047  INFO 1 --- [http-nio-8280-exec-8] de.konfetti.controller.PartyController   : Was not able to get optional client info on request for party list: result returns more than one elements; nested exception is javax.persistence.NonUniqueResultException: result returns more than one elements
2016-11-10 10:15:36.047  INFO 1 --- [http-nio-8280-exec-8] de.konfetti.controller.PartyController   : RESULT number of parties is 2
2016-11-10 10:15:40.853  INFO 1 --- [pool-2-thread-1] d.k.notifier.NotifierBackgroundTask      : |

Also there seems another Exception on the NotifierBackgroundTask after the changes:

2016-11-10 10:13:05.854  INFO 1 --- [pool-2-thread-1] d.k.notifier.NotifierBackgroundTask      : Notification seconds(232131) id(9) party(1) user(null) type(REVIEW_WAITING)
2016-11-10 10:13:05.856 ERROR 1 --- [pool-2-thread-1] d.k.notifier.NotifierBackgroundTask      : EXCEPTION on NotifierBackgroundTask loop: 

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: de.konfetti.data.Party.reviewerUser, could not initialize proxy - no Session
	at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:587)
	at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:204)
	at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:566)
	at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:135)
	at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:277)
	at java.util.AbstractCollection.addAll(AbstractCollection.java:343)
	at de.konfetti.service.UserServiceImpl.getAllUsersReviewerOnParty(UserServiceImpl.java:73)
	at de.konfetti.notifier.NotifierBackgroundTask.shouldNotificationGetHigherAttention(NotifierBackgroundTask.java:202)
	at de.konfetti.notifier.NotifierBackgroundTask.runNotifierBackgroundTaskThread(NotifierBackgroundTask.java:129)
	at de.konfetti.notifier.NotifierBackgroundTask.periodicStartUpTimer(NotifierBackgroundTask.java:101)
	at sun.reflect.GeneratedMethodAccessor137.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
	at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

2016-11-10 10:13:10.853  INFO 1 --- [pool-2-thread-1] d.k.notifier.NotifierBackgroundTask      : |

display task translation on detail

In the translation of the tasks in the details seem not yet the translated texts attracted .. in the listing goes the translation, but if one clicks a request with the chats, then the title is no longer translated.

Use GreyLog for AppError reportings

Hey. Great to have a greylog running in our setup. Would be great to use it for error logs directly from the app running - so that we can improve the App without depending on user feedback alone.

I started to implement that: I created an input on greylog - see "System > Inputs" called "App Error Reports". Its listening already on port 12185 and I opened up the port on azure.

But I dont get a respose to a POST call with Potman to:
http://fourcores2016.cloudapp.net:12185/gelf

I wanted to follow this tutorial: http://docs.graylog.org/en/2.1/pages/sending_data.html#gelf-via-http

I think its because the port is not routed to the correct docker container - didnt wanted to mess something up, so it would be great if can get this port open and the API call working.

If we get to this point, then it would be great to have a skype to discuss the structure of the error data send by the app, to get the best results out of it. Not a high priority, bit would be great to have this working.

adding location to task - some small bugs

When adding a location to a task, the following needs to be improved:

  • extend the data scheme on server of location to persist the comment text
  • display the comment text on app item when available from server

Also make sure that on small screens the "x" button is not pushed party out of the div like on this screenshot:
bildschirmfoto 2016-11-01 um 13 06 41

adding date to task - some small bugs

When adding a date to the task the following is to improve:

  • Make sure "add location" selector is not preselected
  • Extend data scheme on server to persist the comment text
  • display comment text in app item when data is available from server

Also the added date could look nicer - breaks a bit the UI on small screens:
bildschirmfoto 2016-11-01 um 13 02 10

enter code directly after regitration

on my mobile i tested to enter a code directly after registration as new user on welcome screen.

  1. it accepted the code but then I was at the welcome screen again. It should directly go to the party lit and display the party the code belongs to.

  2. after I said OK, then search in my area it showed the party, but displayed me as "reviewer" (why?) and I just git the standard 100 Konfetti even though it said I I got extra konfetti from the code before. Check why.

Edit API when running on DEV config

when the dev config from sample file under docu is running .. it should gently skip the parts where the more complex config is used (pushnoti, email, etc)

500 Server Error on wrong konfetti coupon code

When entering a non existing confetti coupon code, a Server Error returns:

{"timestamp":1477994750244,"status":500,"error":"Internal Server Error","exception":"java.lang.NullPointerException","message":"No message available","path":"/konfetti/api/account/redeem/4234234234"}

API: Party is changing radius

PartyController (around line 250) the personal distance to a user of a party gets calculated ... somehow, this meter distance gets written back into the object ... or at least the next time the party gets requested ... the party is delivered with a modified meter value. Find out why.

i18n - Multi Language Backend

Although the backend has no user interface, it sends out eMails and other text that is visible to the user. Those parts of the backend need i18n translation. I am sure Spring has something to offer here. Would be great if someone could get this started.

Check Backend Code for TODOs containing the mention of 'multi lang' - this will quickly show you the most spots were english texts need to get i18n.

On most API calls the client has a language code as parameter, if this is missing somehow let me know so that I can improve the API calls on the client side.

show rewarded konfetti on task detail view

Once a user was rewarded with konfetti on a task it should be noted in the task detail view. If this features is done, add this to the test protocol on test9 step06.

Date and Location extend data + new meeting object

having the new location and date picker online they contain the possibility to add an comment string directly to the items what makes a lot of sense. these means that the data objects on the backend (an so the DB schema) needs to be extended. Also when date and location combined this should become a new meeting object (in the future).

Both would be a great example for me to learn how to do this correctly. Lets plan this together on a skype call.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.